【问题标题】:MySQL how to store FOUND_ROWS() in a PHP variableMySQL 如何将 FOUND_ROWS() 存储在 PHP 变量中
【发布时间】:2012-12-20 03:29:57
【问题描述】:

我试图在限制查询之前获取查询返回的总行数。我正在尝试使用找到的建议 here,它使用:SQL_CALC_FOUND_ROWS,然后在第二个查询中使用 FOUND_ROWS()

他们举了这个例子:

SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever;
SELECT FOUND_ROWS( ) ;

我想不通的是如何将FOUND_ROWS() 中的第二个值捕获到 PHP 变量中。我在 Wordpress 中工作,所以我使用全局 $wpdb 来处理 MySQL 交互。这是我正在尝试的简化版本:

$rows = $wpdb->get_results( "SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever;" );
$count = $wpdb->get_results( "SELECT FOUND_ROWS();" );

第一个查询有效,但 $count 始终为空。如果我在 phpMyAdmin 中同时运行它们,则查询运行不会出错。

我也试过这个:

$rows = $wpdb->get_results( "SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever;
SET @count = FOUND_ROWS();" );

...但它完全失败了。

我做错了什么?

【问题讨论】:

  • 你是否绑定了返回对象的实际值?你用的是什么 php mysql 类?。
  • 你试过'SELECT SQL_CALC_FOUND_ROWS, FOUND_ROWS() AS NUMOFROWS something FROM your_table WHERE什么; '
  • $rows = $wpdb->get_results( "SELECT SQL_CALC_FOUND_ROWS something FROM your_table WHERE whatever; SELECT FOUND_ROWS();" ); 会给您带来错误吗?
  • 如何使用$wpdb->query() 来代替应该返回所选行的整数?
  • @32bitfloat:这行得通。好主意。如果我无法让 FOUNT_ROWS() 工作,这将作为备份。我怀疑应该稍微快一点,对吧?

标签: php mysql sql wordpress


【解决方案1】:

如果这是 Wordpress,您可以替代地执行第二条语句,否则您要求的是数组而不是数字:

$count = $wpdb->get_var('SELECT FOUND_ROWS()');

还要注意,由于过滤器,wordpress 的数据库类可以更改任何查询并且默认情况下,它会在执行查询并从结果集中获取错误时抑制错误。

您应该启用尖叫以查看是否遇到特定错误。

  • 如果WP_DEBUG 设置为true$wpdb->show_errors = true 会自动显示错误。 (ref)

【讨论】:

  • 这也有效。这与上面 cmets 中 @32bitfloat 的想法相比如何?我最感兴趣的是性能。我还注意到 query() 返回和 int 而 get_var() 返回一个字符串。
  • @Emerson:阅读手册,您应该旨在了解为什么查询返回 int 和 get_var 不是来自代码:codex.wordpress.org/Class_Reference/wpdb - 可能看起来有点难读,阅读后检查这两种方法介绍。
  • 抱歉没有更清楚。我对这些方法很熟悉。我刚刚提到它是为了向未来的读者指出它。我真正关心的是性能问题。最初我试图避免为了获取总行数而进行另一个查询,所以现在我正在这样做,我正在尝试找出最聪明的方法。
  • 性能有什么问题?对你来说有些慢?
  • 目前没有问题,但是这个项目需要能够容纳成千上万的结果,所以我试图从一开始就制定一个聪明的计划。换句话说,当我的开发服务器上只有我和一个小型测试数据库时,它不会感觉很慢。但是我想确保以后当它为数百个拥有巨大数据库的用户上线时不会出现问题。也许它仍然很好,但我对优化 MySQL 的经验不是很丰富,所以这是我正在考虑的事情。
【解决方案2】:

简单。使用这个:

SELECT FOUND_ROWS() as total;

并在 PHP 中获取它:

echo $query[0]->total;

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT count(1) AS rowcount
    FROM table
    

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      相关资源
      最近更新 更多