MYSQL计数(*)返回1 agaisnt一个空表

use*_*421 0 mysql codeigniter

我在Codeigniter中运行此查询

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

但桌子上的朋友们都是空的,他们内心也没什么

if($query->num_rows() > 0) {
 return $query->num_rows();
}
Run Code Online (Sandbox Code Playgroud)

上面的查询返回1,当它显然应该返回0

也修改了查询

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

按预期给我0

关于伯爵(*)的一些特别之处我不知道吗?

pax*_*blo 6

你检索的行数从查询,你应该是真实的检索查询结果.对于一个空表,这是count(*)给你的:

count(*)
--------
       0 <- 1 row, containing the value 0.
Run Code Online (Sandbox Code Playgroud)

它(沿max()或sum()或任何聚合函数真)会给你一个数据行不管有多少表中的行实际上是(虽然不同group by可能会改变).该行将包含计数作为数据(对于空表,它将为零).

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


小智 5

您的查询SELECT count(*)返回一行及其中的行数。由此您将始终得到 1 的行数。

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