Codeigniter改变查询

时间:2015-02-17 21:52:52

标签: php mysql codeigniter

我正在建立一个搜索功能,我非常确定正确的方法是只获得你想要显示的结果数,在我的情况下每页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);

2 个答案:

答案 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;
    }