web-dev-qa-db-ja.com

MySQLのLIKEクエリでORを使用して複数のフィールドを比較する

OR文でLIKEを使用して、MySQLでクエリを実行できるといつも思っていました。したがって、行の複数のフィールドを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%';

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

17
RCNeil

これを使って::

SELECT * FROM MyTable WHERE (Column1 LIKE '%keyword1%' OR Column2 LIKE 
'%keyword1%') AND (Column1 LIKE '%keyword2%' OR Column2 LIKE '%keyword2%');
29
Sashi Kant

希望する構文に最も近いものは次のとおりです。

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

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

22
Mazrick