我一直在用这个问题敲打砖墙几个小时,认为我有机会在这里运气。
我正在处理一个基于类别和类别评级返回产品的查询。
简化的架构如下所示:
产品
ID
命名
价格
类别
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个类别的所有产品。就目前而言,查询仅对返回虚假结果的最后一个类别的评级进行操作。
任何输入都会受到高度赞赏,即使它只是朝着正确方向发展的一点。
干杯。
答案 0 :(得分: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