Intereting Posts
PHP Soap Client – отправка неправильных заголовков «soapenv: VersionMismatch» Обновление нескольких индикаторов выполнения при отправке нескольких файлов и элементов формы через ajax Проблема при создании данных с помощью codeigniter Передача истинного / ложного логического значения String в аргумент функций Как я могу загрузить доступ к файлам вне каталога public_html? WordPress / PHP / Ajax Загрузка дополнительных сообщений Использование Java для анализа XML PHP-поток загружает содержимое веб-сайта до тех пор, Twitter загрузочный лоток распространяется на динамические веб-сайты php pdo получает только одно значение из mysql; значение, равное переменной Хорошо ли использовать htmlspecialchars () перед вставкой в ​​MySQL? Не удается передать экземпляр класса в конструктор Как отображать категории и конечные подкатегории с помощью PHP и MySQL? Ошибка phpmysql – # 1273 – # 1273 – Неизвестная сортировка: 'utf8mb4_general_ci' Лучший способ отправить UL через POST?

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

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

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

Есть ли лучшие способы? Благодаря!

EDIT: Мой SQL-запрос использует WHERE, а также для выбора всех строк с определенным «category_id»

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

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

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

EDIT: Добавлено WHERE после того, как OP упомянул, что им нужна эта функция.

Учитывая, что SQL_CALC_FOUND_ROWS требует вызова FOUND_ROWS() после этого, если вы хотите получить общее количество с результатами, полученными с вашего лимита, без необходимости ссылаться на второй SELECT , я бы использовал результаты JOIN, полученные из подзапроса :

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

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

 SELECT COUNT(id) FROM `table` WHERE `category_id` = 9 

Дает вам количество строк для вашей конкретной категории.