我是新來的開發區。對於我的產品,我需要處理將近100張桌子。我覺得在數據庫中找到一個單詞是有風險的。是否有任何查詢可用於搜索數據庫中任何表中可用的單詞。如果可能的話,結果會給出表名。任何查詢/方式可用於搜索數據庫中的單詞?
謝謝...
我是新來的開發區。對於我的產品,我需要處理將近100張桌子。我覺得在數據庫中找到一個單詞是有風險的。是否有任何查詢可用於搜索數據庫中任何表中可用的單詞。如果可能的話,結果會給出表名。任何查詢/方式可用於搜索數據庫中的單詞?
謝謝...
有MySQL中的全文搜索選項..但它同時作用於一個表。
搜索你要麼需要寫一些動態查詢,或反規範化
,如果你有phpMyAdmin有可能多個表。選擇您的數據庫,然後選擇搜索選項卡。您可以選擇一個或多個表格進行搜索。如果將字段名稱留空,它將在任何字段中進行搜索。比你可以通過表查看結果。 (注:我在phpMyAdmin V3.2測試)
爲獨立的解決方案,我建議這樣的功能:
<?php
function search_all_databases($search_token){
$db = array(
'host' => 'localhost'
,'user' => 'root'
,'pass' => ''
,'database' => 'buns'
,'prefix' => ''
,'type' => 'mysqli'
);
$mysqli = new mysqli($db['host'], $db['user'], $db['pass'], $db['database']);
$output = "<table><thead><tr><th> Database Name </th><th> Occurence </th></tr></thead>";
$sql = "show tables";
$ret = $mysqli->query($sql);
if(0 < $ret->num_rows){
$output.= '<tbody>';
while($row = $ret->fetch_array()){
$output.= '<tr>';
$sql_search_fields = Array();
$table = $row[0];
$output.= '<td>'.$table.'</td>';
$sql2 = "SHOW COLUMNS FROM ".$table;
$ret2 = $mysqli->query($sql2);
if(0 < $ret2->num_rows){
while($row2 = $ret2->fetch_array()){
$colum = $row2[0];
$sql_search_fields[] = "`".$colum."` like('%".$search_token."%')";
}
$ret2->close();
}
if(0 < count($sql_search_fields)){
$search = "select * from ".$table." where ";
$search.= implode(" OR ", $sql_search_fields);
$rs3 = $mysqli->query($search);
$output.= '<td>'.$rs3->num_rows.'</td>';
}else{
$output.= '<td>0</td>';
}
if(0 < $rs3->num_rows){
$rs3->close();
}
$output.= '</tr>';
}
$output.= '</tbody>';
$ret->close();
}
return $output;
}
echo search_all_databases('a');
此功能視mysqli的,你可以把它改成像MySQL數據庫的另一個方法。
此外,這將輸出一個表與結果。如果你想在另一個位置使用結果,我建議將所有結果放在一個數組中。
是否需要一次或重複執行此操作。 – 2012-07-10 13:04:49
@Deepak,你能接受對你有用的答案嗎? – DonSeba 2012-07-19 09:30:33
@ Naveen kumar:我被要求重複這樣做。 – 2012-07-20 10:04:11