MYSQL count(*)对空表返回1

时间:2014-01-06 02:14:43

标签: mysql codeigniter

我在Codeigniter中运行此查询

$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(*)的特别之处,我不知道了吗?

2 个答案:

答案 0 :(得分:5)

您正在从查询中检索行数,您应该在其中实际检索查询结果。对于空表,这是{{1}会给你:

count(*)

它(以及count(*) -------- 0 <- 1 row, containing the value 0. max()或任何聚合函数)将为您提供一行数据,而不管表中实际有多少行(尽管不同的sum()可能会改变这种情况)。该行将包含计数为数据(对于空表将为零)。

当你选择group by时它起作用的原因是因为它将行从表中取出而不是计算它们并且无论如何都给你一行。

答案 1 :(得分:3)

您的查询SELECT count(*)返回一行,其中包含行数。你总是会得到1的行数。

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