Ответ 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();
У меня есть запрос 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.
То, что вы ищете, 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();
Вы можете использовать SQL_CALC_FOUND_ROWS с FOUND_ROWS() для подсчета количества результатов во время выполнения этого запроса. В основном вы просто добавляете "SQL_CALC_FOUND_ROWS" после "SELECT", а затем запускаете еще один запрос "SELECT FOUND_ROWS()". Невозможно отправить счетчик в том же запросе, потому что он не может знать счетчик до завершения запроса.
'это 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, когда вы приступите к использованию результата.
Решение от http://is.php.net/manual/en/function.mysql-num-rows.php#83647
SELECT SQL_CALC_FOUND_ROWS
'0', z.id
FROM
zoom AS z
LIMIT 0,6
UNION
SELECT
'1', FOUND_ROWS()
ORDER BY `0` DESC , RAND()
Вы должны использовать
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