Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL计数查询结果始终为1_Php_Mysql_Count - Fatal编程技术网

Php MySQL计数查询结果始终为1

Php MySQL计数查询结果始终为1,php,mysql,count,Php,Mysql,Count,我想知道为什么我的MySQLCOUNT(*)查询总是导致->num\u行相等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; // prin

我想知道为什么我的MySQL
COUNT(*)
查询总是导致
->num\u行
相等
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
原因可能是什么?

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

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

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

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

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

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

这就是存在
COUNT
的原因,因此它总是返回一行所选行数

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

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

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