Как рассчитать количество строк с помощью LIMIT?


9

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

В настоящее время я использую два отдельных запроса, чтобы сделать это

SELECT COUNT(*) FROM col WHERE CLAUSE
SELECT * FROM col WHERE CLAUSE LIMIT X

Есть ли способ сделать это в одном запросе?

РЕДАКТИРОВАТЬ: выходные данные должны быть colячейки и количество строк. Фактически, после выбора colячеек он должен пройти по столу только для подсчета.

Я знаю, что невозможно объединить эти два запроса, так как первый возвращает 1 строку, а второй X строк. Мне любопытно, если в mysql есть функция, которая возвращает количество строк при наличии LIMIT.


Не могли бы вы показать одну или две строки желаемого результата?
Дезсо

1
Два запроса несовместимы, так как они в настоящее время написаны: один возвращает одну запись с одним столбцом, другой возвращает много столбцов в X строках. Пожалуйста, покажите пример желаемого результата, если вы хотите, чтобы мы дали содержательный ответ.
FrustratedWithFormsDesigner

Ответы:


5

Похоже, вы хотите запустить LIMIT, но все равно знаете, сколько строк было бы возвращено без LIMIT. Проверьте НАЙДЕННЫЕ СТРОКИ


1
+1 для этого FOUND ROWS, и хотя он по-прежнему выполняет два запроса, производительность может быть выше, чем при выполнении второго запроса COUNT (*) (в зависимости от запросов и набора данных).
Дерек Дауни

Это именно то, что я имел в виду. Я знал, что mysqlне оставим нас в покое по такому важному вопросу;)
Googlebot

1
Рад, что это поможет. Не волнуйтесь, MySQL по-прежнему будет держать вас в курсе нескольких важных вопросов.
Ален Коллинз

@DTest: или (может быть) худшая производительность, чем при выполнении второго запроса COUNT (*).
ypercubeᵀᴹ

@ypercube точно
Дерек Дауни

3

Используйте SQL_CALC_FOUND_ROWSв вашем запросе SELECT и затем выполните SELECT FOUND_ROWS():

SELECT SQL_CALC_FOUND_ROWS field_name,filed_name2 FROM col WHERE CLAUSE LIMIT X;
SELECT FOUND_ROWS() ;

1
Это принесет пользу от некоторой очистки и нескольких дополнительных деталей, чтобы сделать его более полезным.
RLF

2

Я знаю, что это старый, но он больше не действителен, с MySQL> = 8.0.17 cf MySQL Function Found_Rows () Так что нам все еще нужно выполнить оба запроса, т.е. добавить один с COUNT(), к сожалению.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.