【问题标题】:Error when using SQL_CALC_FOUND_ROWS()使用 SQL_CALC_FOUND_ROWS() 时出错
【发布时间】:2012-03-09 18:15:00
【问题描述】:

我正在执行一个简单的 MySQL 查询来计算查询返回的行数,而不受 LIMIT 子句的影响。我正在使用带有 Codeigniter PHP 框架的 Active Records。

问题:使用SQL_CALC_FOUND_ROWS 时出现错误。为什么会这样?

查询

SELECT `listing_id`, SQL_CALC_FOUND_ROWS listing_id FROM (`listings`) LIMIT 100

错误

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 'SQL_CALC_FOUND_ROWS listing_id FROM (listings) LIMIT 100' 附近 第 1 行

Codeigniter 活动记录

$this->db->select('listing_id')
            ->select('SQL_CALC_FOUND_ROWS listing_id', FALSE)
            ->from('listings')
            ->where('price < 1000')
            ->limit($limit, $offset)
            ->order_by('listing_id', 'desc');

【问题讨论】:

    标签: php mysql codeigniter activerecord


    【解决方案1】:

    SQL_CALC_FOUND_ROWS 不返回值,它只是一个修饰符,表示应该保存行数——其中不考虑 LIMIT 子句——以便以后可以使用第二个查询(不生成完整的结果集两次)。将其视为与 DISTINCT 关键字相同。

    有关更多信息,请阅读有关此主题的documentation

    【讨论】:

      【解决方案2】:

      你可以使用MySql的count()函数来实现你要找的ie。

      SELECT `listing_id`, count(*) FROM (`listings`) LIMIT 100
      

      【讨论】:

      • 这不是也需要 GROUP BY 语句吗?
      • 这有时会给出不同的结果,因为 SQL_CALC_FOUND_ROWS 忽略了 LIMIT。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多