2011-12-08 74 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

還好,我的表結構如下: –

相關問題