如何获取特定查询的总行数并将查询结果限制为 10 行。例如。我有一张叫做样品的桌子。它有 400 行。在运行类似 where name = "%Sam%" 的查询时,它会返回 213 行。现在我将只取前 10 行并向用户显示结果,但我需要返回的总行数。我应该如何在代码点火器中做到这一点?
SELECT
SQL_CALC_FOUND_ROWS *
FROM
sample
WHERE
name like "%sam%"
像这样?如何检索总数?
如何获取特定查询的总行数并将查询结果限制为 10 行。例如。我有一张叫做样品的桌子。它有 400 行。在运行类似 where name = "%Sam%" 的查询时,它会返回 213 行。现在我将只取前 10 行并向用户显示结果,但我需要返回的总行数。我应该如何在代码点火器中做到这一点?
SELECT
SQL_CALC_FOUND_ROWS *
FROM
sample
WHERE
name like "%sam%"
像这样?如何检索总数?
您需要运行第二个查询以获得以下结果SQL_CALC_FOUND_ROWS:
SELECT FOUND_ROWS()
这将返回使用找到的值SQL_CALC_FOUND_ROWS。但是,您可能会发现使用别名更容易获得结果:
SELECT FOUND_ROWS() AS num_results
您可以使用两个查询一个来获取计数,另一个返回有限的结果。
就像在你的模型中创建一个只返回计数变量的函数
并创建生成分页结果的第二个函数。
例如..
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);
.....................