0

几个小时以来,我一直在用这个查询将我的头撞到一堵砖墙上,并认为我会在这里碰碰运气。

我正在处理一个基于类别和类别评级返回产品的查询。

简化的模式如下所示:

产品
编号
名称
价格

类别
ID
名称

products_categories
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 个类别的所有产品。就目前而言,查询仅对返回虚假结果的最后一个类别的评级进行操作。

任何输入将不胜感激,即使它只是朝着正确方向的一点。

干杯。

4

1 回答 1

1

您需要一个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
于 2013-11-11T21:49:59.497 回答