MySQL COUNT查询始终为1

时间:2012-11-30 20:13:03

标签: php mysql count

我想知道为什么我的MySQL COUNT(*)查询总是导致->num_rows等于1

$result = $db->query("SELECT COUNT( * ) FROM u11_users");
print $result->num_rows; // prints 1

从数据库中获取“真实数据”可以正常工作。

$result = $db->query("SELECT * FROM u11_users");
print $result->num_rows; // prints the correct number of elements in the table

这可能是什么原因?

4 个答案:

答案 0 :(得分:6)

因为Count(*)只返回一行的行数。

实施例: 使用Count(*)结果如下所示。

array('COUNT(*)' => 20);
echo $result['COUNT(*)']; // 20

Reference

答案 1 :(得分:3)

应该返回一行*。要获得计数,您需要:

$result = $db->query("SELECT COUNT(*) AS C FROM u11_users");
$row = $result->fetch_assoc();
print $row["C"];

*,因为您正在使用聚合函数而不使用GROUP BY

答案 2 :(得分:2)

这就是COUNT存在的原因,它总是返回一行,其中包含所选行的数量

http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

答案 3 :(得分:1)

Count()是一个聚合函数,这意味着它只返回一行包含实际答案的行。如果使用像max(id)这样的函数,你会看到相同类型的东西;如果一列中的最大值是142,那么你不会期望看到142条记录,而是一条值为142的单条记录。同样,如果行数是400而你要求计数(*),那么你将不会获得400行,而是获得答案的单行:400。

因此,要获得计数,您将运行第一个查询,并只访问第一行(也是唯一一行)中的值。

顺便说一下,你应该采用这种count(*)方法而不是查询所有数据并取$result->num_rows;因为查询所有行将花费更长的时间,因为你要撤回一堆数据你不需要。