【问题标题】:How to get the number of results MySql would have returned without limit?如何获得 MySql 将无限返回的结果数量?
【发布时间】:2012-10-09 14:44:04
【问题描述】:

我有一个包含大量数据的表,所以我检索它并一次显示一页(我的请求很长,所以我无法在整个表上运行它)。

但我想对结果进行分页,所以我需要知道我的表格中的元素总数是多少。

如果我在同一个请求中执行COUNT(*),我会得到所选元素的数量(在我的例子中是 10)。

如果我在第二个请求中对我的表执行 COUNT(*),则结果可能是错误的,因为我的主查询中有 where、join 和 have 子句。

什么是最干净的方法:

  • 检索数据
  • 了解我的表中针对此特定请求的最大元素数

一个解决方案似乎是使用Mysql function FOUND_ROWS

我试过这个,因为 mysql_query 一次只执行一个查询:(采取here

$query = 'SELECT SQL_CALC_FOUND_ROWS * FROM Users';
$result = mysql_query($query);
// fetching the results ...

$query = 'SELECT FOUND_ROWS()';
$ result = mysql_query($query);

// debug
while ($row = mysql_fetch_row($result)) {
    print_r($row);
}

我得到了一个结果为 0 的数组:

Array ( [0] => 0 )

而我的查询确实返回结果。

我的方法有什么问题?你有更好的解决方案吗?

【问题讨论】:

  • 您没有将结果存储到 $result 变量的任何地方...
  • @MihaiIorga mysql_num_rows 受 LIMIT 子句的影响。就我而言,它返回 10。

标签: php mysql limit


【解决方案1】:

如果是On,则将mysql.trace_mode设置为Off

如果您无法编辑 my.cnf,ini_set('mysql.trace_mode','Off'); 也可能会根据您的主机配置起作用

如果这不能使您在上面发布的代码正常工作,那么您将需要在没有 LIMIT 的情况下再次运行查询并以这种方式计算。

【讨论】:

    【解决方案2】:

    上面的代码运行良好。我没有正确打开连接。

    输出是:

    Array ( [0] => 10976 )
    

    我仍然对另一种方法感兴趣,尤其是不依赖于 mysql 的方法。

    【讨论】:

    • MySQL 是最好的方法,它比 PHP 更了解数据库。
    • 你会选择什么样的选择,但我强烈建议对你的查询运行基准测试。虽然 SQL_CALC_FOUND_ROWS 看起来不错,但大多数情况下它在性能方面是一个糟糕的选择。见 [mysqlperformanceblog.com/2007/08/28/…
    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 2010-12-07
    • 1970-01-01
    • 2021-06-24
    • 2011-09-16
    • 1970-01-01
    • 2020-10-28
    • 2011-06-28
    相关资源
    最近更新 更多