0

MYSQL は次のことができますか?

私の条件 =a b c

私のクエリ =SELECT * FROM pages WHEREコンテンツCONTAINS (a AND b AND c)

ページ内に複数の用語を含むクエリを作成する必要があります (サーチャー)。これを持つセルがある場合は"1a2b3c"フィルタリングする必要があり、他のセルが"1a2b4d9i"ある場合は 2 番目のセルをフィルタリングする必要はありません。

また、できれば言葉で絞り込みたいです。のように"1a2b3c" --> "1 a 2 b 3 c"、テキストが結合されている場合はフィルタリングされません。

このコードをテストします

$sql = mysql_query("SELECT * FROM pages WHERE "
                      ."(`title` LIKE '%$s%' OR "
                      ."`title` LIKE '%$s' OR "
                      ."`title` LIKE '$s%' OR"
                      ."`content` LIKE '%$s%' OR "
                      ."`content` LIKE '%$s' OR "
                      ."`content` LIKE '$s%') "
                      ."AND `name` != 'inicio' "
                      ."AND `name` != 'contactenos' "
                      ."AND `name` != '404' "
                      ."AND `name` != '403' "
                      ."AND `name` != 'login'");

値が 1 つの場合はうまく機能しますが、値が 2 つ以上の場合は何かを見つけることができません。

(a,b,c)また、a|b|cAGAINST、およびその他を試しましREGEXたが、動作させることができませんでした。


編集 1:「foo bar」を検索し、php コードがそれを配列に変換する場合、MYSQL に書き込むにはどうすればよいですか? 私が検索"foo bar"し、私のテキストがそれで"the foo bar is awesome"あり、他のテキストが"the foo is worst"最初にのみ印刷される場合に必要です。

4

1 に答える 1

0

クエリを大幅に短縮できます。このようなものを使用できます

$sql = mysql_query("SELECT * FROM pages WHERE "
                      ."`title` LIKE '%".$s."%' OR "
                      ."`content` LIKE '%".$s."%' OR "
                      ."AND `name` != 'inicio' "
                      ."AND `name` != 'contactenos' "
                      ."AND `name` != '404' "
                      ."AND `name` != '403' "
                      ."AND `name` != 'login'");

GROUP BY を使用して、乗算結果を防ぐことができます。

$sql = mysql_query("SELECT * FROM pages WHERE "
                      ."`title` LIKE '%".$s."%' OR "
                      ."`content` LIKE '%".$s."%' OR "
                      ."AND `name` != 'inicio' "
                      ."AND `name` != 'contactenos' "
                      ."AND `name` != '404' "
                      ."AND `name` != '403' "
                      ."AND `name` != 'login'") GROUP BY title,content;

より良い概要のために:

$sql = mysql_query("SELECT * FROM pages WHERE "
                  ."`title` LIKE '%".$s."%' OR "
                  ."`content` LIKE '%".$s."%' OR "
                  ."AND `name` NOT IN('inicio','contactenos','404','403','login') GROUP BY title,content;

ただし、クエリで使用する前に変数をサニタイズしてください ;)

于 2013-10-27T21:31:29.347 に答える