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'];
}
|