2014-01-06 155 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的行数。

您需要检索该行并查看其包含的计数。