首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在维护查询的同时使用count来获取总行数?

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

Stack Overflow用户
提问于 2011-08-25 05:44:48
回答 2查看 117关注 0票数 0

下面的查询从一个名为video的表中获取所有结果

代码语言:javascript
复制
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 ?,?会减少我的计数。

代码语言:javascript
复制
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

这个查询只返回一个结果,但是返回了一个正确的计数。有人知道我怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-25 05:48:16

MySQL有一个sql_calc_found_rows扩展,它强制DB引擎计算如果没有limit语句,将检索多少行。然后,您可以在一个单独的查询中使用` `SELECT found_rows()`检索这个整行计数。

父查询的基本语法为:

代码语言:javascript
复制
SELECT sql_calc_found_rows video.*  FROM video
...
LIMIT ?,?
票数 7
EN

Stack Overflow用户

发布于 2011-08-25 05:56:24

我会简单地计算一下总数:

代码语言:javascript
复制
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中:

代码语言:javascript
复制
min($query_count,$upper_bound-$lower_bound)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7182697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档