如何在PHP中使用MySQL Found_Rows()?

2022-08-30 17:28:59

由于性能问题,我尽量避免执行Count()。(即选择计数()来自用户)

如果我在phpMyAdmin中运行以下内容,那是可以的:

  SELECT SQL_CALC_FOUND_ROWS * FROM Users;
  SELECT FOUND_ROWS();

它将返回行数。即用户数量。

但是,如果我在PHP中运行,则无法执行此操作:

  $query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users;
    SELECT FOUND_ROWS(); ';
  mysql_query($query);

PHP似乎不喜欢有两个查询传入。那么,我该怎么做呢?


答案 1

SQL_CALC_FOUND_ROWS仅当使用子句,但仍然想知道如果没有 .LIMITLIMIT

想想这是如何运作的:

SELECT SQL_CALC_FOUND_ROWS * FROM Users;

强制数据库检索/解析表中的所有数据,然后将其丢弃。即使您不打算检索任何行,数据库服务器仍将开始从磁盘中提取实际数据,前提是您将需要该数据。

用人类的话说,你买了超级杂货店的全部东西,但扔掉了收银台上除了一包口香糖之外的所有东西。

鉴于,执行:

SELECT count(*) FROM users;

让数据库引擎知道,虽然您想知道有多少行,但您不能不关心实际数据。在大多数智能 DBMS 上,引擎都可以从表的元数据中检索此计数,或者简单地运行表的主键索引,而无需触及磁盘上的行数据。


答案 2

它的两个查询:

$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users';
mysql_query($query);
$query = 'SELECT FOUND_ROWS()';
mysql_query($query);

PHP 每次mysql_query调用只能发出一个查询


推荐