2011-10-12 71 views
1

我有一個分類表和產品表。產品有category_id,也有maker_id。MySQL分組子查詢優化

我試圖返回一個類別名稱的表,以及該類別是否包含屬於給定$ 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

您需要更多的產品除了在從'maker_id'任何其他信息? – Naltharial

+0

是的。我正在做另一個類似的計數,其中有多少處於各種「狀態」。基本上如下: SUM(作爲例子,當p.status ='ready'THEN 1 ELSE 0 END)爲ready_count。如果有一種方法可以將這些類型的分組查詢組合起來,那就太棒了。 – Charles

回答

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;