Я не уверен, что это можно сделать. Но я просто хотел посоветоваться с экспертами здесь.
Мой случай:
У меня есть таблица tbl_campaign, в которой в основном хранятся кампании, имеющие отношение один ко многим с таблицей tbl_campaign_user, где пользователи, выбранные в ходе кампании, хранятся вместе с идентификатором кампании (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'
Я не уверен, что я делал неправильно, объединяя их. Я знаю, я не знаю много о соединениях, так что, возможно, концептуальная ошибка Пожалуйста, кто-нибудь может мне помочь?
Спасибо заранее!