2012-06-19 15 views
13

を比較するために使用してやMySQLでのLIKEクエリで私はいつもあなたは、MySQLで物事を照会するLIKEなステートメントでORを使用することができることを考えました。だから、私は1つのキーワードや用語に行に複数のフィールドを比較したい場合:複数のフィールド

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword%'; 

と私が持っていた場合は単語の配列を比較すること:

SELECT * FROM MyTable WHERE Column1 OR Column2 LIKE '%keyword1%' 
AND Column1 OR Column2 LIKE '%keyword2%'; 

私はその構文を信じていないがしかし、正しいです。

SELECT * FROM MyTable WHERE Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%' AND Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'; 

私はこれについて正しく行っていますか?

+0

私はあなたの "単語の配列"アルゴリズムについてとにかく思っています...カラムが単語のようなもので、カラムが別のものであれば結果を取得してもよろしいですか?あなたがあまりにも手順を使用することができます – Sebas

+0

私にはかなり非効率です。ユーザーが多くの分野に基づいてデータベースを検索したくなるよう – vijay

+0

キーワード(複数可)、検索フィールドから来ています。彼らは検索用語に2つのワードを使用している場合、それはまだこの用語の両方の列を検索するには理にかなっています。彼らは複数の関連語を含む可能性があるので、私は、フィールドを除外したくありません。 – RCNeil

答えて

21

使用この::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%'); 
+0

ああ。私はかっこを取る必要がありますか?それはなぜそれが前に働いていなかったのかを説明します.... – RCNeil

+1

はい。ANDの優先順位はORよりも高いため、中かっこが必要です。 –

+0

素晴らしいです。あなたの返事にとても感謝しています! – RCNeil

17

あなたが希望している構文に最も近いです:

SELECT * FROM MyTable 
WHERE (CONCAT(Column1, Column2) LIKE '%keyword1%') 
AND (CONCAT(Column1, Column2) LIKE '%keyword2%') 

注:検索文字列の先頭に「%」はの使用を排除することインデックス。検索するレコードの任意の数が多い場合には、実装を再考するのが最善でしょう。

+0

あなたの応答に感謝します! – RCNeil

+1

2つの文字列を一緒に追加すると、数値としてキャストされて追加されます。おそらく、結果はゼロになり、WHERE句は決して真と評価されません。 MySQLの列を連結するには、CONCATを使用します。 –

+0

ありがとうございました。私はCONCAT()を使用するようにSQLを更新しました... – Mazrick

関連する問題