我將使它容易對您和MySQL拆分出來是這樣的:
(SELECT a.fk_type_id as ID, COUNT(a.fk_type_id) as TOTAL, b.vch_name as NAME
FROM comments a
JOIN comments_types b ON a.fk_type_id = b.id
WHERE a.entry = X AND a.fk_type_id <> 0 AND a.fk_type_id <> 4
GROUP BY a.fk_type_id)
UNION ALL
(SELECT a.fk_type_id as ID, COUNT(a.fk_type_id) as TOTAL, 'GENERAL/MISC' as NAME
FROM comments a
JOIN comments_types b ON a.fk_type_id = b.id
WHERE a.entry = X AND (a.fk_type_id = 0 OR a.fk_type_id = 4)
GROUP BY a.fk_type_id)
我改變了你LEFT JOIN
到JOIN
因爲我們只計算一個類型的意見。
你可能會改善查詢,在fk_type_id
假設一個索引,通過使「MISC」型「1」,而不是類型「4」,所以你可以不喜歡a.fk_type_id < 2
代替(a.fk_type_id = 0 OR a.fk_type_id = 4
)和a.fk_type_id > 1
,而不是a.fk_type_id <> 0 AND a.fk_type_id <> 4
。
如果您使用索引而不是掃描行,執行兩個單獨的查詢返回不同的結果不會影響性能。
產生這個問題的查詢是什麼? – 2012-02-28 14:56:09
如果在結果行中不是exixst,那麼TOTAL是0.或者你想要其他的嗎? – Narek 2012-02-28 15:00:51