2011-06-29 4 views
29

は私が複数のパターン「LIKE(」%この%「OR 『%%という』)と=何か他のもの」

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

戻り値がゼロの結果のための文字列を検索しようとしているSELECTクエリを持って働いていません

しかし

LIKE '%this%' and something=else 

戻ると

LIKE '%that%' and something=else 
結果

結果を返します

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

+0

適切なエラーチェックがあった場合、最初のクエリで構文エラーが通知されます。最低でも、mysql_query(...)やdie(mysql_error())のようなものが必要です; –

+1

関連スレッドのチュートリアルとしての偉大な答え:http://stackoverflow.com/a/4808757/2906290 –

答えて

57

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

はこれを試してみてください:

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

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

+0

+1ビート57秒考慮すべきもう一つの選択肢は全文検索(FTS)です –

+2

ありがとう! –

1

あなたが試してみました:

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

これは動作しますが(最適化後はまったく同じ計画になる可能性がありますが)、少なくとも人間が消費するためには非分散形式が一般的に好まれます。 –

4

を何か試してみてください:

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

2

をあなたはそれを分割に対して何かを持っていますか? 2つの別々のステートメントにLIKE句アウト

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

ブレイク、すなわち:

(fieldname1 LIKE '%this%' or fieldname1 LIKE '%that%') and something=else 
19
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 
+2

http://dev.mysql.com/doc/refman/5.1/en/regexp。html – mcmillab

+0

実際に複数のLIKESを使用するよりもきれいで客観的です。 – ivanleoncz

+2

もっと読みやすい例: 'SELECT id FROM mytable WHERE description REGEXP" dogs | cats "' –

0

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

ブロックが〜2.5Sを取ったが、これらのフィールドにインデックスを追加し、match ... against ...BOOLEAN MODEを使用した後、それが唯一の0.05sを取ったところでトリプルlikeによって+の35milレコードを持つテーブル上のクエリ。

関連する問題