mysql 分组查询数据时,如何获得用于分页的总记录数?
来源:互联网 发布:.date域名过期 编辑:程序博客网 时间:2024/04/27 17:06
主要是想查询符合条件的记录总数,
查询数据使用的sql为:
- SELECT SUBSTRING_INDEX(`url`,'/',3) AS host,COUNT(*) AS count FROM `tab` WHERE `type`=4 GROUP BY host HAVING(count >= 5) ORDER BY count desc LIMIT 0,10
以下是一些尝试过的方法:
方法一: 一般情况下可以使用DISTINCT来查询总数
- select count(DISTINCT SUBSTRING_INDEX(`url`,'/',3)) as c from tab where type = 4
但是 查询数据中的sql 有 having 子句,这样得到的总数是没有经过条件筛选的。这个结果是错误的。
方法二: 通过 SQL_CALC_FOUND_ROWS 选项忽略 LIMIT 子句,然后通过FOUND_ROWS()获得查询总数,那么sql改为:
- SELECT SQL_CALC_FOUND_ROWS SUBSTRING_INDEX(`url`,'/',3) AS host,COUNT(*) AS count FROM `tab` WHERE `type`=4 GROUP BY host HAVING(count >= 5) ORDER BY count desc LIMIT 0,10
再通过 select FOUND_ROWS(); 获得总数
这样获得的总数没问题,但是由于分页程序需要先获得符合条件的总数,才能生成 page_list ,以及验证offset,和总页数等信息,所以不能先查询数据再得总数。
方法三:和上边的方法类似,只是第一次使用sql获得总数
先:
- SELECT SUBSTRING_INDEX(`url`,'/',3) AS host,COUNT(*) AS count FROM `tab` WHERE `type`=4 GROUP BY host HAVING(count >= 5)
然后:
- select FOUND_ROWS();
最后:
- SELECT SUBSTRING_INDEX(`url`,'/',3) AS host,COUNT(*) AS count FROM `tab` WHERE `type`=4 GROUP BY host HAVING(count >= 5) ORDER BY count desc LIMIT 0,10
这个没有问题,也可以避免方法二中的问题,但是会返回全部的符合条件的数据,并且返回的数据没有任何作用,只是查询一次总数,所以也不可取。
方法四:使用子查询
- select count(*) as count from (select SUBSTRING_INDEX(url,'/',3) as host,count(*) as c from tab where type=4 group by host having(c >= 5)) as temp
这个基本满足了需要,但是效率不是很高,如果子集很大的话,性能上是个问题。
不知道大家还有什么更好的方法? 或者我上述方法中还可以怎么优化?
0 0
- mysql 分组查询数据时,如何获得用于分页的总记录数?
- mysql 分组查询数据时,如何获得用于分页的总记录数?
- MySQL分页查询时获得总条目数
- 资料 mybatis 一条语句 分页查询(同时获得符合条件的总记录数)
- MySQL查询分页,同时获取总记录数
- MySQL中获取当前查询的总记录数,适用于分页等应用
- hibernate 分页查询求总记录数遇到的问题
- 使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集
- MYSQL使用group by,如何查询出总记录数
- MYSQL使用group by,如何查询出总记录数
- MySQL 查询分页数据中分组后取每组的前N条记录
- MySQL 查询分页数据中分组后取每组的前N条记录
- 高效查询mysql表的总记录数
- mysql分组后获得每个分组记录数
- hibernate 多表联合查询,分页,重复记录导致的总记录数不对的解决方法。
- MYSQL使用group by时,查询结果的总记录数
- <!--+查询总记录数+-->
- Hibernate DetachedCriteria方式分页查询返回总记录数
- 电子商务--实训三:网店经营计划书
- Linux上删除用Adobe Air安装的程序
- 输入n,输出从1到n位最大十进制数。例如输入2,输出1、2...99
- 面试题(十一)最长递增子序列
- 去除textarea控件拉伸的功能(未验证)
- mysql 分组查询数据时,如何获得用于分页的总记录数?
- CXF开发与配置webservice .
- Office 2010 您正试图运行的函数包含有宏或需要宏语言支持的内容-解决方法
- 访问jsp抛出异常解决
- ARMA
- IOS plist与沙盒的初步使用
- 娄底蝴蝶树婚纱分享【求婚有妙招】
- applet 操作cookie
- PDF创建和管理控件程序包ActivePDF Portfolio