Почему моя хранимая процедура не возвращает ожидаемый результат? - PullRequest
0 голосов
/ 08 декабря 2011

Привет, у меня есть следующая хранимая процедура ......

DELIMITER $$

DROP PROCEDURE IF EXISTS `CouponCrusaderDev`.`sp_tblemailcampaignLoadTop4`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tblemailcampaignLoadTop4`(p_UserID Int(11))
    SQL SECURITY INVOKER
BEGIN
SELECT EC.*,(Select MailChimpCampaignID from tblcampaignschedule where EC.CampaignID=tblcampaignschedule.CampaignID AND tblcampaignschedule.MailChimpCampaignID IS NOT NULL) as MailChimpCampaignID,
(Select  count(MailChimpCampaignID) from tblcampaignschedule) as msent,CT.CampaignType, 
(Select tblcampaignschedule.ScheduleDateTime from tblcampaignschedule 
where EC.CampaignID=tblcampaignschedule.CampaignID  order By ScheduleDateTime desc limit 1) as CampaignDateTime,
(Select Count(*) from tblemailsent ES
inner join tblcampaignschedule CS on CS.CampaignSceduleID= ES.CampaignSceduleID
where ES.Status= 'ProcessedMessage' and CS.CampaignID = EC.CampaignID)as Sent
FROM tblemailcampaign EC
inner join tblcampalgntype  CT on CT.CampaignTypeID= EC.CampaignTypeID
inner join tblcompanies C On EC.CompanyID = C.CompanyID
WHERE (p_UserID = 0 OR C.AddUserID = p_UserID)
 order by CampaignDateTime desc limit 4
;
END$$

DELIMITER ;

И я должен показать MailChinpCampaignID, который не является нулевым, поэтому я должен сделать следующий код ........

SELECT EC.*,(Select MailChimpCampaignID from tblcampaignschedule where EC.CampaignID=tblcampaignschedule.CampaignID AND tblcampaignschedule.MailChimpCampaignID IS NOT NULL) as MailChimpCampaignID,

но он возвращает все пустые значения mailchimpcampaignid, что я могу сделать

1 Ответ

0 голосов
/ 08 декабря 2011

Ваш запрос возвращает ноль, потому что в tblcampaignschedule нет строки с совпадающим идентификатором и ненулевым MailChimpCampaignID. Я думаю, что лучше всего сделать внутреннее соединение с 'tblcampaignschedule' и таким образом отфильтровать нули ..

Вот как бы я это сделал (внес некоторые другие изменения, чтобы избавиться (я думаю) от ненужных вложенных элементов). Однако, если вы не покажете нам свою структуру таблицы с некоторыми примерами данных, это в лучшем случае предположение.

DELIMITER $$

DROP PROCEDURE IF EXISTS `CouponCrusaderDev`.`sp_tblemailcampaignLoadTop4`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tblemailcampaignLoadTop4`(p_UserID Int(11))
    SQL SECURITY INVOKER
BEGIN
SELECT EC.*,
Select tcs.MailChimpCampaignID as MailChimpCampaignID,
count(distinct tcs.MailChimpCampaignID)as msent,
CT.CampaignType, 
max(tcs.ScheduleDateTime) as CampaignDateTime,
Count(*) as Sent
FROM tblemailcampaign EC
inner join tblcampalgntype  CT on CT.CampaignTypeID= EC.CampaignTypeID
inner join tblcompanies C On EC.CompanyID = C.CompanyID
inner join tblcampaignschedule tcs ON EC.CampaignID=tcs.CampaignID AND MailChimpCampaignID IS NOT NULL
inner join tblemailsent ES ON tcs.CampaignSceduleID= ES.CampaignSceduleID AND ES.Status= 'ProcessedMessage'
WHERE (p_UserID = 0 OR C.AddUserID = p_UserID)
 order by CampaignDateTime desc limit 4
;
END$$

DELIMITER ;

EDIT:

DELIMITER $$

DROP PROCEDURE IF EXISTS `CouponCrusaderDev`.`sp_tblemailcampaignLoadTop4`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tblemailcampaignLoadTop4`(p_UserID Int(11))
    SQL SECURITY INVOKER
BEGIN
SELECT EC.*,
Select tcs.MailChimpCampaignID as MailChimpCampaignID,
(Select  count(MailChimpCampaignID) from tblcampaignschedule) as msent,CT.CampaignType, 
(Select tblcampaignschedule.ScheduleDateTime from tblcampaignschedule 
where EC.CampaignID=tblcampaignschedule.CampaignID  order By ScheduleDateTime desc limit 1) as CampaignDateTime,
(Select Count(*) from tblemailsent ES
inner join tblcampaignschedule CS on CS.CampaignSceduleID= ES.CampaignSceduleID
where ES.Status= 'ProcessedMessage' and CS.CampaignID = EC.CampaignID)as Sent
FROM tblemailcampaign EC
inner join tblcampalgntype  CT on CT.CampaignTypeID= EC.CampaignTypeID
inner join tblcompanies C On EC.CompanyID = C.CompanyID
inner join tblcampaignschedule tcs ON EC.CampaignID=tcs.CampaignID AND MailChimpCampaignID IS NOT NULL
WHERE (p_UserID = 0 OR C.AddUserID = p_UserID)
 order by CampaignDateTime desc limit 4
;
END$$

DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...