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子句但想知道没有它的行数,请在查询中使用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)
对于非常大的表,这不会特别有效,并且在运行查询以获取数据页之前,最好运行更简单的查询来获取计数并缓存它.
小智 22
如果您必须使用简单SQL解决问题,则可以使用子查询.
select count(*) from (select * from foo) as x;
Run Code Online (Sandbox Code Playgroud)
如果您的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()函数