我如何计算mysql查询返回的行数?

30 php mysql

我如何计算mysql查询返回的行数?使用PHP ..

Pau*_*xon 78

获取查询结果中的总行数...

你可以迭代结果并计算它们.您没有说明您使用的是哪种语言或客户端库,但API确实提供了一个mysql_num_rows函数,该函数可以告诉您结果中的行数.

这在PHP中公开,例如,作为mysqli_num_rows函数.正如您编辑的问题提到您正在使用PHP,这是一个使用mysqli函数的简单示例:

$link = mysqli_connect("localhost", "user", "password", "database");

$result = mysqli_query($link, "SELECT * FROM table1");
$num_rows = mysqli_num_rows($result);

echo "$num_rows Rows\n";
Run Code Online (Sandbox Code Playgroud)

获得符合某些条件的行数...

只需使用COUNT(*) - 请参阅MySQL手册中的Counting Rows.例如:

SELECT COUNT(*) FROM foo WHERE bar= 'value';
Run Code Online (Sandbox Code Playgroud)

使用LIMIT时获取总行数...

如果您使用了LIMIT子句但想知道没有它的行数,在查询中使用SQL_CALC_FOUND_ROWS,然后使用SELECT FOUND_ROWS();

SELECT SQL_CALC_FOUND_ROWS * FROM foo
   WHERE bar="value" 
   LIMIT 10;

SELECT FOUND_ROWS();
Run Code Online (Sandbox Code Playgroud)

对于非常大的表,这不会特别有效,并且在运行查询以获取数据页之前,最好运行更简单的查询来获取计数并缓存它.

  • +1包含SQL_CALC_FOUND_ROWS以及使用它的正确上下文 (2认同)

小智 22

如果您必须使用简单SQL解决问题,则可以使用子查询.

select count(*) from (select * from foo) as x;
Run Code Online (Sandbox Code Playgroud)


Ste*_*rov 7

如果您的SQL查询有一个LIMIT子句,并且您想知道该数据集中总共有多少结果,那么您可以使用SQL_CALC_FOUND_ROWS后跟SELECT FOUND_ROWS();这将使用COUNT(*)
Example 返回行数A LOT (直接来自MySQL文档):

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
    -> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
Run Code Online (Sandbox Code Playgroud)


小智 5

使用如下 2 个查询,一个用于获取有限制的数据,另一个用于获取总匹配行数。

前任:

SELECT * FROM tbl_name WHERE id > 1000 LIMIT 10;
SELECT COUNT(*) FROM tbl_name WHERE id > 1000;
Run Code Online (Sandbox Code Playgroud)

正如Mysql 指南所描述​​的,这是最优化的方式,并且从 MySQL 8.0.17 开始不推荐使用SQL_CALC_FOUND_ROWS查询修饰符和FOUND_ROWS()函数