SQL: подсчет количества совпадающих результатов при использовании запроса LIMIT - PullRequest
3 голосов
/ 16 февраля 2010

Скажем, таблица users в моей базе данных MySQL содержит очень большое количество записей.

Мне нужно пройти через всех пользователей, но я хочу сделать это только порциями (то есть, используя LIMIT и OFFSET):

SELECT * FROM users LIMIT 100 OFFSET 200

Можно ли узнать общее количество пользователей, совпадающих в запросе, но вернуть только ОГРАНИЧЕННОЕ число из них?

Другими словами, могу ли я заранее узнать общее количество пользователей без отдельного запроса?

Ответы [ 3 ]

4 голосов
/ 16 февраля 2010

Вы можете сделать это (почти) одним запросом, используя SQL_CALC_FOUND_ROWS и FOUND_ROWS():

SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 100 OFFSET 200;
SELECT FOUND_ROWS();

Несмотря на то, что вы по-прежнему получаете два набора результатов, фактический запрос выполняется только один раз, что избавляет вас от повторяющегося кодирования и, возможно, от некоторых ненужных циклов процессора.

0 голосов
/ 16 февраля 2010

Это невозможно в стандарте SQL. Я не знаю mysql много, но я бы предположил, что это невозможно даже в любом расширении SQL.

0 голосов
/ 16 февраля 2010

К сожалению нет. Вам нужно выполнить два запроса: один для получения общего числа пользователей, другой - для получения одной страницы пользователей.

select count(*) from users;
select * from users limit 0,10;
...