我有一个类别表和一个产品表。产品有category_id,还有maker_id。
我试图返回一个类别名称表,以及一个二进制文件,表明该类别是否包含属于给定$ maker_id的任何产品(如PHP代码中所定义)。
我当前的方法计算每个类别中匹配产品的数量,但我假设有更快的方法,因为我只需要是/否。目前的代码:
SELECT
c.name,
SUM(CASE WHEN p.maker_id = '{$maker_id}' THEN 1 ELSE 0 END) AS already_used
FROM categories c
LEFT JOIN products p ON p.category_id = c.id
GROUP BY c.id
我正在阅读使用EXISTS,但我发现的所有示例都在WHERE子句中使用它。谢谢!
答案 0 :(得分:1)
你可以试试这个:
SELECT c.name,COUNT(1) AS already_used, SUM(IF(p.status = 'ready', 1, 0)) AS ready_count
FROM categories c
LEFT JOIN products p
ON (p.category_id = c.id)
WHERE p.maker_id = '{$maker_id}'
GROUP BY c.id;