私は開発エリアに不慣れです。私の製品では、100 近くのテーブルを処理する必要があります。DB で利用可能な単一の単語を見つけるのはリスクを感じます。DB の任意のテーブルで使用可能な単語を検索するために使用できるクエリはありますか。結果は、可能であればテーブル名を示します。
ありがとうございました...
mysqlには全文検索オプションがありますが、一度に1つのテーブルで機能します。
複数のテーブルを検索するには、動的クエリを作成するか、非正規化する必要があります
スタンドアロンソリューションの場合、この機能をお勧めします:
<?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 などの別のデータベース メソッドに変更できます。
また、これは結果を含むテーブルを出力します。結果を別の場所で使用したい場合は、すべての結果を配列などに入れることをお勧めします。
phpMyAdmin があれば可能です。データベースを選択し、[検索] タブをクリックします。検索するテーブルを 1 つ以上選択できます。フィールド名を空のままにすると、任意のフィールドが検索されます。結果を表ごとに表示できます。(注: phpMyAdmin v3.2 でテストしました)