2011-12-08 80 views
-1

嗨,我有以下存储过程......为什么我的存储过程不会返回预期的结果?

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的我能做些什么

+0

哪里是ERM在我的代码??? –

+0

你的问题是什么? –

+2

这是MySQL吗?请简化您的问题以删除对您的实际问题多余的信息。告诉我们你期望你的结果是什么样子。 –

回答

0

您的查询返回null,因为在“tblcampaignschedule”没有行与匹配的ID和非空MailChimpCampaignID。我认为最好的做法是内部连接到'tblcampaignschedule',并过滤出这些空值的方式..

这是我该怎么做(做了一些其他更改也摆脱(我认为)不必要的子-selects)。但是,除非您向我们展示您的表格结构以及一些示例数据,否则这至少是一种猜测。

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 ; 

编辑:

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 ; 
+0

您的代码中有哪些内部联接? ....... –

+0

8号线从底部 – StevieG

+0

还好,我的表结构如下: –

相关问题