2012-11-30 126 views
0

我想知道为什么我的MySQL COUNT(*)查询总是导致->num_rows等于1MySQL COUNT查询结果为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 

这可能是什么原因?

回答

1

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

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

顺便说一句,你应该用这个数去(*)的方法,而不是查询所有数据,并采取$result->num_rows;,因为既然你拉回一组数据你不查询所有的行会需要更长的时间需要。

6

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

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

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

Reference

+0

非常感谢! –

3

应该返回一行*。为了得到你需要的计数:

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

*由于您使用的是聚合函数,而不是使用GROUP BY