2014-01-06 124 views
0

我的笨MYSQL COUNT(*)返回1 agaisnt一個空表

$query = $this->db->query("SELECT count(*) FROM `friends` WHERE uid=$logged_id AND who=$id") 

但該表的朋友是空運行此查詢,他們是它

if($query->num_rows() > 0) { 
return $query->num_rows(); 
} 

查詢裏面什麼上述返回1,當明確地它應該返回0

修改查詢太

$query = $this->db->query("SELECT id FROM `friends` WHERE uid=$logged_id AND who=$id") 

給我0,如預期的那樣

是他們關於count(*)的一些我不知道的東西嗎?

回答

5

您正在從您的查詢中檢索行數,您應該在那裏實際檢索結果。對於空表,這是什麼count(*)會給你:

count(*) 
-------- 
     0 <- 1 row, containing the value 0. 

它(與max()sum()或任何聚合函數真的沿)會給你的數據一個行不管有多少行實際上是在表中(儘管不同的group by可能會改變這一點)。該行將包含計數爲數據(對於空表將爲零)。

當您選擇id時,它的工作原因是因爲它將行從表中取出,而不是對它們進行計數並給予您一行。

+0

是的,完全忽略了這一點,謝謝 – user3023421

3

您的查詢SELECT count(*)返回一行,其中包含行數。你總是會得到1的行數。

您需要檢索該行並查看其包含的計數。