我想这或多或少是一件微不足道的事情,但是在这里...

我的关系表很少,我想根据2个值检索行。到目前为止,这是我的查询:

SELECT `inventory`.*, `tags`.*, `tags_inv`.*, `categories`.*, `categories_inv`.*
FROM (`tags`)
LEFT JOIN `tags_inv` ON `tags_inv`.`tag_id` = `tags`.`tag_id`
LEFT JOIN `inventory` ON `inventory`.`inventory_id` = `tags_inv`.`inv_id`
LEFT JOIN `categories_inv` ON `categories_inv`.`inv_id` = `inventory`.`inventory_id`
LEFT JOIN `categories` ON `categories`.`cat_id` = `categories_inv`.`cat_id`
WHERE `categories`.`cat_id` = 1
AND  `inventory`.`inv_name`  LIKE '%p%'
OR  `inventory`.`inv_dim_w`  LIKE '%p%'
OR  `inventory`.`inv_dim_l`  LIKE '%p%'
OR  `inventory`.`inv_dim_h`  LIKE '%p%'
OR  `tags`.`tag_description`  LIKE '%p%'
ORDER BY `inventory`.`inv_name`


问题是我的查询从数据库中选择了所有内容(就像忽略cat_id),但是在这种情况下,我只想选择cat_id为1的行...
有没有快速合理的方法来解决此问题? :)

提前致谢!

最佳答案

在WHERE子句中使用括号将所有OR条件组合在一起。因为您在WHERE中的AND和OR处于同一级别,所以它忽略了所有OR分支的cat_id = 1过滤器。

关于mysql - MySQL查询关系表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6862369/

10-13 02:03