【发布时间】:2017-10-30 19:59:47
【问题描述】:
我有一个关于通过选择选项过滤不同产品的问题。该查询已在此处解决:Filter products by options。
我现在的问题是分页的计数查询。例如,此查询返回 37 行,计数为 1。
SELECT COUNT(DISTINCT p.id) AS number
FROM products p
LEFT JOIN product_categories pc ON p.id = pc.product_id
LEFT JOIN product_images pi ON p.id = pi.product_id
LEFT JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1
AND po.option_id IN(1)
AND p.main_price BETWEEN 5250.00 AND 14000.00
GROUP BY(p.id)
HAVING COUNT(DISTINCT po.option_id) = 1
但如果我删除 DISTINCT:
SELECT COUNT(p.id) AS number
FROM products p
LEFT JOIN product_categories pc ON p.id = pc.product_id
LEFT JOIN product_images pi ON p.id = pi.product_id
LEFT JOIN product_options po ON p.id = po.product_id
WHERE p.product_active = 1
AND po.option_id IN(1)
AND p.main_price BETWEEN 5250.00 AND 14000.00
GROUP BY(p.id)
HAVING COUNT(DISTINCT po.option_id) = 1
这也返回 37 行的混合数字。
做错了什么?我知道我可以通过对这个结果集进行额外计数来实现这一点,但我认为这不是正确的解决方案?
同样如上一个问题所建议的那样,有人说我不应该需要 DISTINCT,因此查询是有缺陷的。你能告诉我是什么问题吗?
【问题讨论】:
-
你的问题是什么?如果您使用
GROUP BY(p.id),它将返回 37 行,因为有 37 个不同的p.ids 。而所有这些 id 只有一个option_id那有什么令人困惑的?
标签: mysql sql pagination