【发布时间】:2011-05-05 11:03:22
【问题描述】:
我不确定这是否可以做到。但我只是想和这里的专家核实一下。
我的情况是: 我有一个表 tbl_campaign,它基本上存储了一个活动,该活动与一个名为 tbl_campaign_user 的表具有一对多关系,其中在活动期间选择的用户与活动 ID 一起存储(tbl_campagin_user.cu_campaign_id = tbl_campaign.campaign_id)。
第二个表 (tbl_campaign_user) 有一个状态字段,0 / 1 表示未发送/已发送。我想编写一个 sql 查询来读取活动数据以及已发送和未发送活动用户的数量(这就是我在第二个表上加入两次的原因)。 我在下面尝试了这个,但我得到的计数与已发送和未发送相同。
SELECT `tbl_campaign`.*,
COUNT(sent.cu_id) as numsent,
COUNT(unsent.cu_id) as num_unsent FROM (`tbl_campaign`)
LEFT JOIN tbl_campaign_user as sent on (sent.cu_campaign_id = tbl_campaign.campaign_id and sent.cu_status='1')
LEFT JOIN tbl_campaign_user as unsent on (unsent.cu_campaign_id = tbl_campaign.campaign_id and unsent.cu_status='0')
WHERE `tbl_campaign`.`campaign_id` = '19'
我尝试通过将查询分成两部分进行调试: =>
SELECT `tbl_campaign`.*,
COUNT(unsent.cu_id) as num_unsent FROM (`tbl_campaign`)
Left join tbl_campaign_user as unsent on (unsent.cu_campaign_id = tbl_campaign.campaign_id and unsent.cu_status='0')
WHERE `tbl_campaign`.`campaign_id` = '19'
上面的工作完全符合要求。下面的也是这样:
=>
SELECT `tbl_campaign`.*,
COUNT(sent.cu_id) as numsent FROM (`tbl_campaign`)
Left join tbl_campaign_user as sent on (sent.cu_campaign_id = tbl_campaign.campaign_id and sent.cu_status='1')
WHERE `tbl_campaign`.`campaign_id` = '19'
我不确定在合并两者时我做错了什么。我知道我对连接不太了解,所以可能是概念错误?请问谁能帮帮我?
提前谢谢!
【问题讨论】: