активировать активную запись codeigniter и запрашивать запрос без предложения LIMIT

im, используя активную запись, все работает нормально, но я хочу установить $ data ["totalres"] на итоговые результаты, я имею в виду один и тот же запрос, но без LIMIT

проблема в том, что предыдущие утверждения не срабатывают, когда вы выполняете модификатор запроса, поэтому я не могу даже добавить $ this-> db-> limit () после получения результатов.

есть идеи? я думаю, что его плохая практика «дублировать» запрос только для этого

function get_search($start, $numrows, $filter = array()) { ... $this->db ->select("emp") ->from('emp') ->join('empr', 'empr.b = empr.id', 'left') ->like('code', $code) ->limit($numrows, $start); ... $q = $this->db->get(); // number of rows WITHOUT the LIMIT X,Y filter $data["totalres"] = ???????; if ($q->num_rows() > 0) { $data["results"] = $q->result(); } else { $data["results"] = array(); } return $data; } 

Вы можете использовать SQL_CALC_FOUND_ROWS чтобы получить количество строк, которые были бы возвращены sans- LIMIT . Обратите внимание на ,FALSE в строке select . Это говорит CodeIgniter не пытаться избежать предложения SELECT с backticks (поскольку SQL_CALC_FOUND_ROWS не является полем, а CodeIgniter этого не понимает).

 $this->db ->select("SQL_CALC_FOUND_ROWS emp", FALSE) ->from('emp') ->join('empr', 'empr.b = empr.id', 'left') ->like('code', $code) ->limit($numrows, $start); $q = $this->db->get(); 

Затем, после того, как этот запрос запущен, нам нужно запустить другой запрос, чтобы получить общее количество строк.

 $query = $this->db->query('SELECT FOUND_ROWS() AS `Count`'); $data["totalres"] = $query->row()->Count; 

Попробуй это:

 function get_search($start, $numrows, $filter = array()){ $tmp= $this->db ->select("emp") ->from('emp') ->join('empr', 'empr.b = empr.id', 'left') ->like('code', $code) ->_compile_select(); $q= $this->db->limit($numrows, $start)->get(); // number of rows WITHOUT the LIMIT X,Y filter $data["totalres"] = $this->db->query($tmp)->num_rows(); if ($q->num_rows() > 0){ $data["results"] = $q->result(); } else { $data["results"] = array(); } return $data; } 

Я бы предпочел использовать кеширование запросов CIs.

Чтобы использовать это, вы запускаете кеш, создаете запрос без ограничений. Запустите свой запрос, чтобы получить полный счет, затем примените ограничение и запустите запрос, чтобы получить список для своей страницы со смещением, в котором вы нуждаетесь.

Кэш будет помнить переменные, которые были определены.

Затем вы можете очистить кеш для последующих запросов.

пример

  $this->db->start_cache(); // Where, like, having clauses in here $this->db->stop_cache(); $count = $this->db->get('table')->num_rows(); $this->db->limit('limit', 'offset'); $result = $this->db->get('table')->result_array(); $this->db->flush_cache(); 
 $this->db ->select("SQL_CALC_FOUND_ROWS emp", FALSE) ->from('emp') ->join('empr', 'empr.b = empr.id', 'left') ->like('code', $code) ->limit($numrows, $start); $q = $this->db->get(); $query = $this->db->query('SELECT FOUND_ROWS() AS `Count`'); $data["totalres"] = $this->db->get()->row()->Count; 

CodeIgniter 2.1.0 не запускается, код ниже будет исправлен.

 $query = $this->db->query('SELECT FOUND_ROWS() AS `Count`'); $objCount = $query->result_array(); $data["totalres"] = $objCount[0]['Count'];