001:MySQLのカラムから、And,Orによる文字列検索対象言語:PHP / MySQL
|
|
PHP 5.0 MySQL WHERE LIKE AND OR 文字列 検索 アンド オア カラム データベース | |
ANDOR ・入力された検索語が0個でも1個でも複数でも ・PHP側の処理を極端に減らして その上で<SQL文を1行だけ発行して処理を増やさない>です。検索語が1つの場合はANDでもORでも同じ検索結果が得られないといけません。 本家MYSQLサイトでも「OR で結合された 2 つの異なるキーを使用した検索は、まだ最適化されていません」(@3.6.7. 2 つのキーを使用した検索)とあったり、UNION構文でSELECTを繋げたりとあったり、ORの場合はIN演算子で代用したりとありましたが、いや、1行にこだわりたい。 入力されたデータを処理(空白・タグ等の除去とか)した後、不特定な数の検索語をWHERE句内で連結するのですが、この連結(特にORの場合)がなかなか悩みました。 |
|
//あらかじめPOSTされたデータを処理(空白・タグ等の除去)して配列にしておく。 $kensaku_words = array("検索したい文字列たち"); $kensaku_op = "検索オプション(AND / OR)"; if ($kensaku_op === "AND") { $operand = 1; } else { $operand = 0; }
$where = "WHERE " . $operand; // ここのWHEREのすぐ後ろに空白が付いているのをお忘れ無く! foreach ($kensaku_words as $word) { $where .= " " . $kensaku_op . " `テーブル` LIKE '%{$word}%'"; }
$sql = "SELECT `id` FROM '検索対象のカラム' {$where}"; $result = mysql_query($sql,$link) or die(mysql_error()); while ($rec = mysql_fetch_assoc($result)) { $kensaku_id_array[] = $rec['id']; }
|