【问题标题】:code igniter SQL_CALC_FOUND_ROWS代码点火器 SQL_CALC_FOUND_ROWS
【发布时间】:2013-06-14 12:57:45
【问题描述】:

如何获取特定查询的总行数并将查询结果限制为 10 行。例如。我有一张叫做样品的桌子。它有 400 行。在运行类似 where name = "%Sam%" 的查询时,它返回 213 行。现在我将只取前 10 行并向用户显示结果,但我需要返回的总行数。我应该如何在代码点火器中做到这一点?

SELECT
        SQL_CALC_FOUND_ROWS *
FROM
        sample
WHERE
        name like "%sam%"

喜欢这样吗? 如何检索总数?

【问题讨论】:

    标签: php mysql sql codeigniter pagination


    【解决方案1】:

    您需要运行第二个查询才能获得SQL_CALC_FOUND_ROWS 的结果:

    SELECT FOUND_ROWS()
    

    这将返回使用SQL_CALC_FOUND_ROWS 找到的值。不过,您可能会发现使用别名更容易获得结果:

    SELECT FOUND_ROWS() AS num_results
    

    【讨论】:

      【解决方案2】:

      您可以使用两个查询一个来获取计数,另一个返回有限的结果。

      就像在你的模型中创建一个只返回计数变量的函数

      并创建生成分页结果的第二个函数。

      例如..

      public function count($where){
              $query = $this->db->query("select count(id) as count from clients $where");
              return $query->row('count');
              }
      }
      
      public function limit($sidx,$sord,$start,$limit,$where){
              $query = $this->db->query("select * from clients $where ORDER BY $sidx $sord LIMIT $start , $limit");
              if ($query->num_rows() > 0){
                  return $query->result_array();
              }
      }
      

      这里是控制器代码

      $where = // 计算出来的

      $count = count($this->model->count($where));
      
              if( $count > 0 ) { $total_pages = ceil($count/$limit); } else { $total_pages = 0; }
      
              if ($page > $total_pages) $page = $total_pages; 
      
      
              $start = $limit * $page - $limit;
      
      
              $users = $this->model->limit($sidx,$sord,$start,$limit,$where);
      

      ..................

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-09
        • 2011-06-04
        • 2016-01-28
        • 2012-06-30
        • 2012-02-21
        • 2011-03-29
        • 2011-08-06
        • 2011-07-28
        相关资源
        最近更新 更多