2013-12-09 31 views
1

我有一個查詢,看起來完全一樣:返回一行零,而不是沒有結果

SELECT aid, 
    COALESCE(SUM(s.amount),0) AS total_spend 
FROM rt_spends AS s 
WHERE `aid` = 7 
    AND `date` BETWEEN '2013-12-01' AND '2013-12-09' 
GROUP BY s.aid 

它返回的線沿線的東西:

然而在事件有零記錄在該日期範圍內。我想輸出一些東西,如

aid | total_spend 
7  0.00 

這會更適合PHP或MySQL?

+1

現在會發生什麼? – Robbert

+0

它只會返回零結果 –

+2

使用UNION SELECT,在第二個SELECT中返回您喜歡的0樣式結果,然後在外部SELECT中返回LIMIT 1。 – arkascha

回答

1

這會工作,因爲它是一個簡單的SUM查詢我想這也說明了,你可能會更好用PHP處理「沒有結果」相當複雜的:)

SELECT aid, SUM(s.amount) AS total_spend 
FROM (
    SELECT amount FROM rt_spends 
    WHERE aid = 7 AND `date` BETWEEN '2013-12-01' AND '2013-12-09' 
    UNION SELECT 7, 0 
) s 
GROUP BY s.aid 
+0

我做了一個小小的改動,並且在內部select中加入了'aid',但它的工作方式就像一個魅力。我仍然會考慮使用PHP處理任何結果 –

0

將COALESCE更改爲IFNULL。

合併用於比較,您正在選擇。

+0

這將返回與我的查詢 –

0

龍虎鬥arkascha的評論:

SELECT * 
FROM (
    (SELECT aid, 
    COALESCE(SUM(s.amount),0) AS total_spend 
    FROM rt_spends AS s 
    WHERE `aid` = 7 
    AND `date` BETWEEN '2013-12-01' AND '2013-12-09' 
    GROUP BY s.aid) 

    UNION ALL 

    (SELECT aid, 0 AS total_spend WHERE `aid` = '7') 
) sub_query 
LIMIT 1 
+0

相同的確切內容。這會返回一個'1064'相關的語法,以便在'WHERE'aid' ='7') )sub_query 附近使用'第12行限制1' –

+0

對不起,我忘了把from子句放在......'SELECT aid,0 AS total_spend FROM rt_spends WHERE aid ='7'' ... – amaster

0

我會沿着這個路線走了,但我對語法的內存是不是最好的:

SELECT aid, 
    COALESCE(sub.total_spent,0) AS total_spend 
FROM rt_spends AS s 
    LEFT JOIN (
     SELECT SUM(rt_spends.amount) AS total_spent 
     FROM rt_spends 
     WHERE `aid` = 7 
      AND `date` BETWEEN '2013-12-01' AND '2013-12-09' 
     GROUP BY rt_spends.aid 
    ) AS sub 
WHERE `aid` = 7 
GROUP BY s.aid 

國際海事組織雖然,你可能會更好的在PHP做這個,爲什麼讓MySQL來做沒有什麼可以得到的工作!?

無論如何,你正在通過援助,所以如果'總'爲空做任何你想做的事情。我可以認爲你需要在查詢中處理這個問題的唯一原因是,如果你從數據庫中提取更多的信息,這只是它的一個元素,即你需要記錄返回其他的東西,即使沒有花費金額但如果有數量需要總數,但只是在日期之間 - 這就是爲什麼我會去查詢子查詢路線。