2

私はこのMysqlクエリを使用しています:

WHERE fname LIKE '%{$query}%' OR lname LIKE '%{$query}%' OR zipcode LIKE '%{$query}%' OR city LIKE '%{$query}%'

データベースに次の情報があるとします。

  • 名: ビル
  • 姓: ゲイツ
  • 郵便番号: 12345 AA
  • 都市: ニューヨーク

「ニューヨーク」を検索すると、期待どおりの結果 (ビル ゲイツ) が得られますが、「ビル ニューヨーク」を検索すると、結果が得られません。

複数の列を検索する正しいクエリは何ですか?

4

3 に答える 3

3

列に対してステートメントで LIKE を使用する場合、「ビル ニューヨーク」のすべてを都市「ニューヨーク」と比較すると、「ビル」というフレーズが列ではなくクエリに含まれているため、失敗します。

この場合、以下のように MySQL の FULLTEXT 検索を使用する方が適切です。

SELECT FieldName, 
MATCH (FieldName) AGAINST (+"Bill New York" IN BOOLEAN MODE) AS Relevance
FROM MyTable
WHERE MATCH (FieldName) AGAINST (+"Bill New York" IN BOOLEAN MODE) 
HAVING Relevance > 0
ORDER BY Relevance DESC

テーブル構造を提供できれば、答えを拡張できます。

于 2013-08-29T09:58:27.300 に答える
0

あなたが抱えている問題は、LIKEが基本的に=の大文字と小文字を区別しないバージョンであることです

あなたがやろうとしていることについて行くことができる2つの方法があります.最初の方法は、sacesでr $queryを爆発させ、見つかった作業ごとにLIKEのシリーズを使用することです.これは厄介で、私はお勧めしません.

2番目のより好ましいオプションは、全文検索 MATCH() AGAINST() を使用することです。これははるかに単純で、よりクリーンなコードになります http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural- language.html <- これは開始するのに適した場所です

于 2013-08-29T09:57:49.657 に答える
0

クエリを個別の単語に解析し、各フィールドで各単語を個別に検索し、それらを OR する長い WHERE 句を動的に作成する必要があります。

また

FULLTEXT インデックス作成を使用します。

私は後者を提案します。

于 2013-08-29T09:59:06.950 に答える