以下查询从名为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
此查询仅返回一个结果,但返回正确的计数。有谁知道如何解决这个问题?
答案 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)