2011-07-08 11 views
1

と `SELECT``声明私は行がクエリから返さ取得していた理由について混乱しています...ここでMYSQL: `OR`と` AND`

がクエリで、それはの存在を検索します1つの表の文字列。

SELECT * 
    FROM `donor` 
WHERE `col1` LIKE '%test%' 
    OR `col2` LIKE '%test%' 
    OR `col3` LIKE '%test%' 
    OR `col4` LIKE '%test%' 
    AND `delete` = 0 

AND delete = 0は、行を返すされ、最後の行には、「削除」欄には、「1」ですか?誰がなぜこれが起こっているのか考えているのですか?

答えて

4
は、次のようにWHERE句を書き直し

SELECT * FROM `donor` WHERE 
(`col1` LIKE '%test%' OR 
`col2` LIKE '%test%' OR 
`col3` LIKE '%test%' OR 
`col4` LIKE '%test%') 
AND `delete` =0 
あなたがしたい

や基準の第1セットを一緒にして、AND演算を行います。

+0

+1:基準を正しく適用するために必要な括弧。しかし、フルテキスト検索(FTS)機能に切り替えることによって実際に利益を得ることができます –

+0

これは答えです!どうもありがとうございました! – superUntitled

+0

特に、このような問題を避けるために、論理テストのためにかっこを 'OR'と' AND'の両方に入れてください。将来のメンテナがあなたに感謝します。 –

1

条件をグループ化するには、角括弧()で囲む必要があります。これを試してください:

SELECT * FROM `donor` WHERE 
(`col1` LIKE '%test%' OR 
`col2` LIKE '%test%' OR 
`col3` LIKE '%test%' OR 
`col4` LIKE '%test%') AND 
`delete` =0