mysql OR子句分别对应AND子句

时间:2011-07-01 00:57:21

标签: php mysql

我有一个用于过滤/排序数据库记录的表单。

我按作者,类别和标签过滤帖子。我为作者和类别使用AND子句,为标签使用OR子句(可以输入多个标签)

查询如下所示

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

上面的查询会返回包含搜索过的任何标记的帖子,无论作者或类别如何。

我想仅在作者姓名ebook, ipad, apple和类别dan内返回包含标记technology的帖子。

如何在mysql中这样做?

2 个答案:

答案 0 :(得分:5)

在或

周围添加括号
SELECT 
    * 
FROM 
    (`posts`) 
WHERE 
    `author` = 'dan' AND 
    `category` = 'technology' AND 
     ( `tags` LIKE '%ebook%' OR `tags` LIKE '%ipad%' OR `tags` LIKE '%apple%' )

答案 1 :(得分: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%'