0

我想知道为什么我的 MySQLCOUNT(*)查询总是导致->num_rows是 equal 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

4 回答 4

6

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

示例:使用Count(*)结果类似于以下内容。

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

参考

于 2012-11-30T20:14:18.887 回答
3

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

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

* 因为您使用的是聚合函数而不是使用GROUP BY

于 2012-11-30T20:15:36.277 回答
2

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

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

于 2012-11-30T20:15:49.440 回答
1

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

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

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

于 2012-11-30T20:21:12.047 回答