Можно ли использовать счетчик, чтобы получить общее количество строк при ведении запроса? - PullRequest
0 голосов
/ 25 августа 2011

Следующий запрос получает все результаты из таблицы с именем video

SELECT video.* from video 
LEFT JOIN conv_progress on video.vid_id=conv_progress.vid_id 
LEFT JOIN upload_progress on video.vid_id=upload_progress.vid_id 
where conv_progress.vid_id is null
AND upload_progress.vid_id is null
ORDER BY video.timestamp DESC LIMIT ?, ?

Я просто хочу подсчитать общие результаты для использования нумерации страниц.Текущий limit ?,? уменьшает мой счет, если я использую rowCount ().

SELECT video.*, COUNT(vid_id) as count from video 
LEFT JOIN conv_progress on video.vid_id=conv_progress.vid_id 
LEFT JOIN upload_progress on video.vid_id=upload_progress.vid_id 
where conv_progress.vid_id is null
AND upload_progress.vid_id is null
ORDER BY video.timestamp DESC LIMIT ?, ?',$variables

Этот запрос возвращает только один результат, но правильный номер счета.Кто-нибудь знает, как я могу это исправить?

Ответы [ 2 ]

7 голосов
/ 25 августа 2011

MySQL имеет расширение sql_calc_found_rows, которое заставляет механизм БД вычислять, сколько строк было бы извлечено, если бы не было оператора limit. Затем вы можете получить этот полный счетчик строк с помощью [SELECT found_rows()][1] в отдельном запросе.

Основной синтаксис для родительского запроса будет:

SELECT sql_calc_found_rows video.*  FROM video
...
LIMIT ?,?
1 голос
/ 25 августа 2011

Я бы просто вычислил сумму:

SELECT count(*) from video 
LEFT JOIN conv_progress on video.vid_id=conv_progress.vid_id 
LEFT JOIN upload_progress on video.vid_id=upload_progress.vid_id 
where conv_progress.vid_id is null
AND upload_progress.vid_id is null

Затем, исходя из языка, который вы используете, определите наименьшее из числа между возвращаемым счетчиком и количеством строк, которое ваш запрос ограничил бы вашими двумя.?параметры.В PHP:

min($query_count,$upper_bound-$lower_bound)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...