MySQL在有条件的地方

MySQL在有条件的地方

几个小时以来,我一直把头撞在砖墙上,以为我在这里会碰运气。

我正在处理一个根据类别和类别评分返回产品的查询。

简化的架构如下所示:

产品展示
ID
名称
价钱

类别
ID
名称

产品_类别
product_id
category_id
评分(0-5)

我目前拥有的查询如下:

SELECT
`products` . *, products_categories.*
FROM
`products`
    JOIN
`products_categories` ON (`products`.`id` = `products_categories`.`product_id`)
WHERE
`products_categories`.`category_id` IN ('5' , '24', '41')
    AND `products_categories`.`rating` > 1
    AND `products`.`enabled` = 1
HAVING count(distinct (products_categories.category_id)) = 3
ORDER BY `amount` ASC
LIMIT 9 OFFSET 0


查询的第一部分是选择属于这3个类别的所有产品,它们都可以正常工作,但是,我苦苦挣扎的部分是评分部分。

如果类别的评级为1或更高,我需要查询选择属于这3个类别的所有产品。就目前而言,查询仅对返回伪造结果的最后一个类别的评级进行操作。

任何输入都将不胜感激,即使这只是正确方向上的一点。

干杯。

最佳答案

您需要一个GROUP BY子句,以便COUNT()将按乘积进行计数,而不是一次性对所有内容进行计数。

SELECT
`products` . *, products_categories.*
FROM
`products`
    JOIN
`products_categories` ON (`products`.`id` = `products_categories`.`product_id`)
WHERE
`products_categories`.`category_id` IN ('5' , '24', '41')
    AND `products_categories`.`rating` > 1
    AND `products`.`enabled` = 1
GROUP BY products.id
HAVING count(distinct (products_categories.category_id)) = 3
ORDER BY `amount` ASC
LIMIT 9 OFFSET 0

关于mysql - MySQL在有条件的地方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19916555/

10-12 02:37