2011-07-01 10 views
0

データベースレコードをフィルタリング/ソートするためのフォームがあります。AND句に対応するmysql OR句

投稿者、カテゴリ、タグの投稿をフィルタリングしています。私は、クエリは、この

SELECT * 
FROM (`posts`) 
WHERE `author` = 'dan' 
    AND `category` = 'technology' 
    AND `tags` LIKE '%ebook%' 
    OR `tags` LIKE '%ipad%' 
    OR `tags` LIKE '%apple%' 

任意のタグに関係なくの検索含んで返すポスト上記のクエリのように見えます

(複数のタグを入力することができます)、著者、カテゴリやタグの OR句の AND句を使用しています著者またはカテゴリ。

タグebook, ipad, appleを含む投稿を投稿者の名前danとカテゴリtechnologyにのみ戻したいとします。

mysqlでどうすればできますか?

答えて

5

これは、何が必要ですかの

SELECT 
    * 
FROM 
    (`posts`) 
WHERE 
    `author` = 'dan' AND 
    `category` = 'technology' AND 
    (`tags` LIKE '%ebook%' OR `tags` LIKE '%ipad%' OR `tags` LIKE '%apple%') 
+2

PS米国では、ほとんどの場合「括弧」と呼ばれ、「括弧」は通常「[」と「]」を指しますが、正確には「角括弧」と呼ばれます。 – dkamins

2

の周りにブラケットを追加します。

SELECT * 
FROM (`posts`) 
WHERE `author` = 'dan' 
    AND `category` = 'technology' 
    AND (`tags` LIKE '%ebook%' OR `tags` LIKE '%ipad%' OR `tags` LIKE '%apple%') 

操作の順序で、何をやっていたことと同等であったので:

SELECT * 
FROM (`posts`) 
WHERE (`author` = 'dan' AND `category` = 'technology' AND `tags` LIKE '%ebook%') 
    OR `tags` LIKE '%ipad%' 
    OR `tags` LIKE '%apple%'