Подтвердить что ты не робот

Как подсчитать все строки при использовании SELECT с LIMIT в запросе MySQL?

У меня есть запрос mysql:

SELECT A.ID, A.NAME, B.ID, B.NAME
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
    cond1, cond2, ..., condN
LIMIT 10

У меня есть много предложений о предложениях. Как улучшить этот запрос, чтобы получить также полный счетчик строк? Я не хочу использовать еще один запрос без LIMIT.

4b9b3361

Ответ 1

То, что вы ищете, this

SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
  cond1, cond2, ..., condN
LIMIT 10

SELECT FOUND_ROWS();

Ответ 2

Вы можете использовать SQL_CALC_FOUND_ROWS с FOUND_ROWS() для подсчета количества результатов во время выполнения этого запроса. В основном вы просто добавляете "SQL_CALC_FOUND_ROWS" после "SELECT", а затем запускаете еще один запрос "SELECT FOUND_ROWS()". Невозможно отправить счетчик в том же запросе, потому что он не может знать счетчик до завершения запроса.

Ответ 3

'это 4 года с момента последнего ответа, но именно так я решил проблему. Хотя ответ SaltLake дал мне ошибку, это привело меня к правильному ответу.

SELECT SQL_CALC_FOUND_ROWS * FROM wholedatabase LIMIT 0,10 UNION 
SELECT 'TotalRows', FOUND_ROWS(), NULL, NULL, NULL, NULL
ORDER BY IssueDate, VolumeNo 

Часть UNION очень важна, потому что она отправляет ваш желаемый ответ (общее количество строк), который извлекается в результате SECOND Select, на результаты FIRST Select.

Еще один очень важный момент состоит в том, что, поскольку UNION имеет место, обе таблицы должны иметь одинаковое количество столбцов в них. Обычно это означает, что вам нужно вставить SECOND Select с помощью важного значения FOUND_ROWS(), а затем много значений NULL.

Конечным результатом будет одна команда, которая вернет 11 строк информации, причем одна из этих строк содержит общее количество строк. Очевидно, вам нужно будет исключить дополнительную строку TotalRows, когда вы приступите к использованию результата.

Ответ 5

Вы должны использовать

SELECT SQL_CALC_FOUND_ROWS A.ID, A.NAME, B.ID, B.NAME, FOUND_ROWS() as rCount
FROM table1 A
JOIN table2 B ON ( A.ID = B.TABLE1_ID )
WHERE
    cond1, cond2, ..., condN
LIMIT 10