我正在建立一个非常基本的事件管理和邀请系统。为此,我构建了2个表,并使用一个查询来列出所有事件,它们的邀请计数为1。发送的邀请总数2.接受的总数3.拒绝的总数4.等待总数
以下是查询
SELECT
*,
count(im.event_id_fk) as total_invitations,
count(im2.event_id_fk) as total_accepted,
count(im3.event_id_fk) as total_rejected,
count(im4.event_id_fk) as total_waiting
FROM event_mst em
LEFT JOIN invitation_mst im
ON (em.event_id_pk = im.event_id_fk)
LEFT JOIN invitation_mst im2
ON (em.event_id_pk = im2.event_id_fk AND im2.status = 'Accept')
LEFT JOIN invitation_mst im3
ON (em.event_id_pk = im3.event_id_fk AND im3.status = 'Reject')
LEFT JOIN invitation_mst im4
ON (em.event_id_pk = im4.event_id_fk AND im4.status = 'Waiting')
GROUP BY
im.event_id_fk,
im2.event_id_fk,
im3.event_id_fk,
im4.event_id_fk
ORDER BY
em.date_added DESC现在的问题是,这个查询给出了错误的计数,例如,如果总共发送了3个邀请,它就会给出9个。如果有5个邀请,它就会给出25个。
因此,它似乎是在与自身相乘,并返回结果。我知道这个select查询一定出了什么问题。有没有人纠正我这个问题?
提前谢谢。
发布于 2013-03-14 15:12:08
这是mysql最简单的解决方案,因为它支持布尔计算。
SELECT event_id_pk,
COUNT(*) as total_invitations,
SUM(status = 'Accept') as total_accepted,
SUM(status = 'Reject') as total_rejected,
SUM(status = 'Waiting') as total_waiting
FROM event_mst
GROUP BY event_id_pk但查询不会给出邀请的全部细节,为此,您可以将查询包装在子查询中,并将其与原始表本身连接,
SELECT a.*,
b.total_invitations,
b.total_rejected,
b.total_waiting
FROM event_mst a
INNER JOIN
(
SELECT event_id_pk,
COUNT(*) as total_invitations,
SUM(status = 'Accept') as total_accepted,
SUM(status = 'Reject') as total_rejected,
SUM(status = 'Waiting') as total_waiting
FROM event_mst
GROUP BY event_id_pk
) b ON a.event_id_pk = b.event_id_pkhttps://stackoverflow.com/questions/15403202
复制相似问题