代码点火器SQL_CALC_FOUND_ROWS

时间:2013-06-14 12:57:45

标签: php mysql sql codeigniter pagination

如何获取特定查询的总行数,并将查询结果限制为10行。例如。我有一张叫做样本的桌子。它有400行。在运行name =“%Sam%”的查询时,它返回213行。现在我只占用前10行并将结果显示给用户,但我需要返回总行数。我应该如何在代码点火器中执行此操作?

SELECT
        SQL_CALC_FOUND_ROWS *
FROM
        sample
WHERE
        name like "%sam%"
像这样? 如何检索总数计数?

2 个答案:

答案 0 :(得分:1)

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

SELECT FOUND_ROWS()

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

SELECT FOUND_ROWS() AS num_results

答案 1 :(得分:0)

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

与您的模型一样,创建一个仅返回计数变量

的函数

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

例如..

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);

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