2010-01-18 41 views
4

我試圖使用SELECT COUNT(*)來查找數據庫中不同事物的數量。問題是,當存在零 -選擇COUNT(*)有時返回0,有時不返回任何內容

例如,

​​

如果沒有結果,我仍然會得到一個0回來,可以檢查$result['COUNT(*)']

但與此查詢,

SELECT COUNT(*) , `first_name` , `last_name` , `email` 
FROM `images` 
WHERE `approved` = '0' 
AND (
    `first_name` = '' 
    AND `last_name` = '' 
    AND `email` = '' 
) 
GROUP BY `first_name` , `last_name` , `email` 

我剛剛得到一個空的結果集。
如何在沒有結果的情況下使用此查詢得到0?

+1

解決此問題的更好方法是處理處理查詢的代碼中的兩種情況。 – ZoogieZork 2010-01-18 22:05:57

回答

4

這聽起來像你想要做的分組,但只是計數那些被批准的。

SELECT COUNT(CASE WHEN approved = '0' THEN 1 END) AS Cnt, 
     first_name , last_name , email 
FROM images 
GROUP BY first_name , last_name , email; 
1

原因是第一個是簡單的聚合查詢,它返回一個單一的序數值。第二個查詢是按查詢分組,它返回一行結果的元組。由於查詢具有不同的返回類型,因此它們具有不同的空值。

+2

零不是一個真正的空值;它是空集合中的行數。 – 2010-01-18 22:06:33

-1

嘗試使用IsNull(first_name,''),就好像列中有null一樣,它們不會被忽略。

1

您正在使用此方法執行兩個非常獨特的操作,並且我會阻止這種查詢。完全正確的方法是將它分成兩個單獨的查詢,並分別運行它們。

如果您願意,您可以簡單地運行第二個查詢WITHOUT計數,然後獲得在應用程序級別返回的行的計數,這是可以接受的,並且THAT計數將等於0,其中沒有行返回。

1

你不能「只是得到一個零」與該查詢,因爲你問它的行。在第一個查詢中,您要求提供一個元素的行,其中元素是計數 - 並且總是返回一個數字。但在第二個問題中,您需要一個行,當沒有這樣的行存在時,不返回行是正確的。

1

第二個查詢爲每個唯一的一組(first_name, last_name, email)事件提供了一個結果行。如果沒有記錄可言,沒有(first_name, last_name, email)組合,沒有結果行,並沒有COUNT(*)值...

相關問題