web-dev-qa-db-ja.com

'LIKE('%this% 'OR'%that% ')and something = else' not working

複数のパターンの文字列を検索しようとしている選択クエリがあります

LIKE ('%this%' or '%that%' ) and something=else

ゼロの結果を返します

しかしながら

LIKE '%this%' and something=else

結果を返します

LIKE '%that%' and something=else

結果を返します

すべての結果を1つのクエリにまとめることはできますか?文字列が両方に一致する場合、それはどのように処理されますか?

39
Kevin Ohashi

できればいいのですが、その構文をSQLで使用することはできません。

これを試して:

_(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else
_

ブラケットの使用に注意してください! OR式の周りにそれらが必要です。
角括弧なしでは、A OR (B AND C)として解析され、期待する結果が得られません。

78
Bohemian
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
21
Nijat Asad

次のようなものを試してください:

WHERE (column LIKE '%this%' OR column LIKE '%that%') AND something = else

5
Dirk

LIKE句を2つの別々のステートメントに分割します。

(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%' ) and something=else
3
Ryan

それを分割することに反対する何かがありますか?

...FROM <blah> 
   WHERE 
     (fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%') 
     AND something = else
2
josh.trow

やってみました:

(column LIKE '%this%' and something=else) or (column LIKE '%that%' and something=else)
1
BumbleB2na

私はそれが少し古い質問であることを知っていますが、依然として人々は効率的な解決策を見つけようとしているので、代わりに FULLTEXT index (MySQL 5.6.4から利用可能です)を使用する必要があります。

ブロックが〜2.5sを取得したトリプルlikeによる+ 35milレコードを持つテーブルのクエリ。ただし、これらのフィールドにインデックスを追加し、-を使用した後 ブールモード inside match ... against ...それだけでした0.05s

0
Michal_Szulc