我将使它容易对您和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