複数のパターンの文字列を検索しようとしている選択クエリがあります
LIKE ('%this%' or '%that%' ) and something=else
ゼロの結果を返します
しかしながら
LIKE '%this%' and something=else
結果を返します
LIKE '%that%' and something=else
結果を返します
すべての結果を1つのクエリにまとめることはできますか?文字列が両方に一致する場合、それはどのように処理されますか?
できればいいのですが、その構文をSQLで使用することはできません。
これを試して:
_(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else
_
ブラケットの使用に注意してください! OR
式の周りにそれらが必要です。
角括弧なしでは、A OR (B AND C)
として解析され、期待する結果が得られません。
Instead of using `LIKE` use `REGEXP`.
For example:
REGEXP 'THIS|THAT'
For example:
REGEXP 'THIS|THAT'
mysql> SELECT 'pi' REGEXP 'pi|apa'; -> 1
mysql> SELECT 'axe' REGEXP 'pi|apa'; -> 0
mysql> SELECT 'apa' REGEXP 'pi|apa'; -> 1
mysql> SELECT 'apa' REGEXP '^(pi|apa)$'; -> 1
mysql> SELECT 'pi' REGEXP '^(pi|apa)$'; -> 1
mysql> SELECT 'pix' REGEXP '^(pi|apa)$'; -> 0
Refer:
http://dev.mysql.com/doc/refman/5.1/en/regexp.html
次のようなものを試してください:
WHERE (column LIKE '%this%' OR column LIKE '%that%') AND something = else
LIKE
句を2つの別々のステートメントに分割します。
(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%' ) and something=else
それを分割することに反対する何かがありますか?
...FROM <blah>
WHERE
(fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%')
AND something = else
やってみました:
(column LIKE '%this%' and something=else) or (column LIKE '%that%' and something=else)
私はそれが少し古い質問であることを知っていますが、依然として人々は効率的な解決策を見つけようとしているので、代わりに FULLTEXT index (MySQL 5.6.4から利用可能です)を使用する必要があります。
ブロックが〜2.5sを取得したトリプルlike
による+ 35milレコードを持つテーブルのクエリ。ただし、これらのフィールドにインデックスを追加し、-を使用した後 ブールモード inside match ... against ...
それだけでした0.05s。