我想知道为什么我的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
这可能是什么原因?
答案 0 :(得分:6)
因为Count(*)
只返回一行的行数。
实施例:
使用Count(*)
结果如下所示。
array('COUNT(*)' => 20);
echo $result['COUNT(*)']; // 20
答案 1 :(得分:3)
应该返回一行*。要获得计数,您需要:
$result = $db->query("SELECT COUNT(*) AS C FROM u11_users");
$row = $result->fetch_assoc();
print $row["C"];
*,因为您正在使用聚合函数而不使用GROUP BY
答案 2 :(得分:2)
这就是COUNT
存在的原因,它总是返回一行,其中包含所选行的数量
答案 3 :(得分:1)
Count()是一个聚合函数,这意味着它只返回一行包含实际答案的行。如果使用像max(id)这样的函数,你会看到相同类型的东西;如果一列中的最大值是142,那么你不会期望看到142条记录,而是一条值为142的单条记录。同样,如果行数是400而你要求计数(*),那么你将不会获得400行,而是获得答案的单行:400。
因此,要获得计数,您将运行第一个查询,并只访问第一行(也是唯一一行)中的值。
顺便说一下,你应该采用这种count(*)方法而不是查询所有数据并取$result->num_rows;
因为查询所有行将花费更长的时间,因为你要撤回一堆数据你不需要。