我正在建立一个搜索功能,我非常确定正确的方法是只获得你想要显示的结果数,在我的情况下每页20个。我想知道更改select('*')
语句以返回选择('count(*)');
的总结果数并重新运行完全相同的查询的最佳方法是什么?
$this->db->select('*');
$this->db->from('MyTable');
$this->db->where('some complex conditions');
$this->db->join('a bunch of joins);
$this->db->limit('20','$page*20');
到
$this->db->select('count(*)');
/* reuse this part */
$this->db->from('MyTable');
$this->db->where('some complex conditions');
$this->db->join('a bunch of joins);
/* reuse this part */
$q1 = $this->db->get()->result_array();
$q2 = $this->db->get('q1 with different select')->result_array();
array_merge($q1,$q2);
答案 0 :(得分:1)
Codeigniter实际上有一个非常有用的分页助手: https://ellislab.com/codeIgniter/user-guide/libraries/pagination.html
如果您不想使用它,可以通过网址将当前查询号传递给控制器。
例如www.example.com/网页/搜索/ 40。然后查询将使用该数字作为限制。
答案 1 :(得分:1)
您也可以这样做
// For required output
$this->db->select('');
$this->db->from();
$this->db->join();
$this->db->order_by();
$this->db->limit((int)$page['limit'],(int)$page['start']);
$list['list'] = $result->result();
// To count total number of rows
$this->db->select('');
$this->db->from();
$this->db->join();
$this->db->order_by();
$result_total = $this->db->get();
$list['list'] = $result->result();
$list['total'] = $result_total->num_rows();
return $list;
}