1

私のサイトには検索メカニズムがあります。そのために、大規模な条件付きクエリを作成しました。

$sql = "select * from users where 
keyword like '%".$_POST['search']."%' 
OR name like '%".$_POST['search']."%'";

さて、サイトには次のデータがあると思います。

ID    Name    Keyword
1     Sanjay  sanjay, surani
2     Ankit   ankit, shah
3     Ravi    ravi, kotwani

ここで、ユーザーが書き込みを行ったとき"sanjay, shah" ($_POST['search'] = 'sanjay, shah')にレコード 1 と 2 が表示されるような結果が必要です。

単一の mysql クエリでこれを達成できますか?

4

3 に答える 3

2

キーワード フィールドを再構成し、名前が 1 つだけになるように分割するとしたらどうでしょうか。

だから代わりに

ID    Name    Keyword
1     Sanjay  sanjay, surani
2     Ankit   ankit, shah
3     Ravi    ravi, kotwani

あなたが持っているだろう

ID    Name    KeyID
1     Sanjay  1
2     Sanjay  2
3     Ankit   3
4     Ankit   4
5     Ravi    5
6     Ravi    6

KeyID Keyword
1     sanjay
2     surani
3     ankit
4     shah
5     ravi
6     kotwani

検索ははるかに高速になります。

于 2012-04-07T10:56:46.723 に答える
0

ここにあります :

$query_elems = explode(",", $query);
$searches = array();
foreach($query_elems as $qe){
    $searches[] = "keyword like '%" . trim($qe) . "%' or name like '%" . trim($qe) . "%'";
}
$query = "select * from users where " . implode(" or ",$searches);
$result = mysql_query($query)
于 2012-04-07T10:26:30.193 に答える
0

php in_array を使用すると、問題が単純化されます

于 2012-04-07T11:27:12.323 に答える