在维护查询的同时,是否可以使用count来获取总行数?

时间:2011-08-24 21:44:48

标签: mysql sql

以下查询从名为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 ?, ?

我只想计算分页使用的总结果。如果我使用rowCount(),则当前limit ?,?会减少我的计数。

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 个答案:

答案 0 :(得分:7)

MySQL有一个sql_calc_found_rows扩展名,它强制数据库引擎计算如果不是限制语句,则检索了多少行。然后,您可以在单独的查询中使用[SELECT found_rows()][1]检索此完整行计数。

父查询的基本语法是:

SELECT sql_calc_found_rows video.*  FROM video
...
LIMIT ?,?

答案 1 :(得分:1)

我只想计算总数:

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)