Найти общее количество результатов в запросе MySQL со смещением+пределом


Я делаю функцию разбиения на страницы с помощью Codeigniter, но я думаю, что это относится к кодированию PHP/MySQL в целом.

Я извлекаю списки каталогов, используя смещение и ограничение, в зависимости от того, сколько результатов я хочу получить на странице. Однако, чтобы узнать общее количество требуемых страниц, мне нужно знать (общее количество результатов)/(ограничение). Прямо сейчас я подумываю о том, чтобы запустить SQL-запрос во второй раз, а затем подсчитать количество требуемых строк, но без использования ОГРАНИЧЕНИЯ. Но я думаю, что это похоже на пустая трата вычислительных ресурсов.

Есть ли какие-нибудь лучшие способы? Спасибо!

ИЗМЕНИТЬ: Мой SQL-запрос также использует WHERE для выбора всех строк с определенным идентификатором категории

Author: Ivar, 2011-05-08

4 answers

Взгляните на SQL_CALC_FOUND_ROWS

 29
Author: Dr.Molle, 2011-05-08 16:41:09

SELECT COUNT(*) FROM table_name WHERE column = 'value' очень быстро вернет общее количество записей в таблице, соответствующей этому условию.

Операции с базой данных SELECT обычно являются "дешевыми" (с точки зрения ресурсов), поэтому не стесняйтесь использовать их разумным образом.

РЕДАКТИРОВАТЬ: Добавлено WHERE после того, как ОП упомянул, что им нужна эта функция.

 6
Author: Austin, 2011-05-08 16:31:57

Учитывая, что SQL_CALC_FOUND_ROWS требует последующего вызова FOUND_ROWS(), если вы хотите получить общее количество с результатами, возвращенными из вашего предела, без необходимости вызывать второй SELECT, я бы использовал ОБЪЕДИНЕНИЕ результатов, полученных из подзапроса :

SELECT * FROM `table` JOIN (SELECT COUNT(*) FROM `table` WHERE `category_id` = 9) t2 WHERE `category_id` = 9 LIMIT 50

Примечание: Каждая производная таблица должна иметь свой собственный псевдоним, поэтому обязательно укажите имя объединенной таблицы. В моем примере я использовал t2.

 2
Author: Daerik, 2016-12-14 20:13:47
SELECT COUNT(id) FROM `table` WHERE `category_id` = 9

Указывает количество строк для вашей конкретной категории.

 -1
Author: Tom Claus, 2011-05-08 16:18:31