У меня сложный запрос с несколькими внутренними объединениями. Запрос написан на чистом SQL. Я не хочу конвертировать его в Active Record. Для разбивки на страницы мне нужно знать общее количество строк, которые запрос возвратит, но я не хочу его выполнять. Я старался:
$this->db->count_all_results($query);
но это ничего не возвращает. Есть ли другой способ получить количество строк в сложном запросе, написанном на SQL?
Вот запрос:
SELECT o.id, o.heading, o.description, p.product_name, s.company_name
FROM ci_offer o
INNER JOIN ci_products p ON o.product_id = p.id
INNER JOIN ci_suppliers s ON p.supplier_id = s.id
ORDER BY o.modified DESC
Если вы хотите использовать count_all_results, вам нужно использовать ActiveRecord.
Но вы также можете заменить столбцы в предложении SELECT на
COUNT(1) AS total
count_all_results()
Позволяет определить количество строк в конкретном запросе Active Record!
вам нужно будет выполнить запрос и позволить mysql дать вам количество записей, которые запрос возвращает в результате. если вам нужно только количество полученных строк, попробуйте следующее:
SELECT count(*)
FROM ci_offer o
INNER JOIN ci_products p ON o.product_id = p.id
INNER JOIN ci_suppliers s ON p.supplier_id = s.id
ORDER BY o.modified DESC
В некотором роде странное ожидание 🙂 Я не думаю, что даже MySQL может предсказать количество строк результатов конкретного запроса, не выполняя его, не говоря уже о среде PHP.
То, что вы можете попробовать, это использовать либо транзакцию SQL, а затем откат или, возможно, EXPLAIN.
С наилучшими пожеланиями
Попробуй использовать :
$count = $query->num_rows();
Вместо :
$count = $this->db->count_all_results($query);
Удачи !
Я использую SQL_CALC_FOUND_ROWS, чтобы получить общее количество.
$this->db->select('SQL_CALC_FOUND_ROWS ci_offer.id', false);
$this->db->select('FOUND_ROWS() as total_rows', false);
$query = $this->db->get();
$total = $query->row_array();
$list_array['total'] = $total['total_rows'];