Codeigniter получить количество строк сложного запроса

У меня сложный запрос с несколькими внутренними объединениями. Запрос написан на чистом 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

0

Решение

Если вы хотите использовать count_all_results, вам нужно использовать ActiveRecord.

Но вы также можете заменить столбцы в предложении SELECT на

COUNT(1) AS total
2

Другие решения

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
1

В некотором роде странное ожидание 🙂 Я не думаю, что даже MySQL может предсказать количество строк результатов конкретного запроса, не выполняя его, не говоря уже о среде PHP.

То, что вы можете попробовать, это использовать либо транзакцию SQL, а затем откат или, возможно, EXPLAIN.

С наилучшими пожеланиями

0

Попробуй использовать :

$count = $query->num_rows();

Вместо :

$count = $this->db->count_all_results($query);

Удачи !

0

Я использую 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'];
0
По вопросам рекламы [email protected]