利用mysql中的SQL_CALC_FOUND_ROWS 来实现group by后的记录数统计
最近正在做一个显示消息的列表页,列表页中需要根据一个字段来分组显示。并且需要一个分页的效果。
大家也知道group by 后的数据是每一组一行记录,统计分组后的总的记录数又不能用count,所以SQL_CALC_FOUND_ROWS就派上用场了。
所谓SQL_CALC_FOUND_ROWS是指在执行带LIMIT的查询时,附带统计一下如果不加LIMIT的话将会输出多少条结果。
用法:
SELECT SQL_CALC_FOUND_ROWS * FROM `TA` LEFT JOIN `TB` on TA.id = TB.a_id GROUP BY TA.id ORDER BY ctime desc limit 0,20;
查询完毕后再执行:
SELECT FOUND_ROWS();
这个语句返回group by 后的总记录数,如下图:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAABICAIAAADtbSlhAAAFSUlEQVR4nO2ay47aSBRA70fFlsW/RAID/SFZBJoWiE+YVVYWMkLub8gOtRo0yLCdZJa0PcFkYtNZ1MNlbMDj9qOm6x5dKXY9r+uY9OvCK8OyLH693+/3+71lWX+n+fLxw6evwr9CB3z8Et9+/fQBkoi9/xnLsrLzETdM7HB+z1vP8i6WzKuUZBxRQkt8A+Icfn1NfEPcFl8j/yfxF7gh/rs0EPFNZ0GRWXzOR7gh/ps0EPFNZ0GRWXzOR0DxRXj/4v+SBiK+6SwoMovP+QjZ4i3kFk1ovU3+/C+KbyJtpD5QvKKgeEW5Lf4P5D2SS3x4i91uF51ef/yLUV9Ep9fdblftJz6v+J8Y9YVE4v/5iVFfSCX+hFFboHhFA8UrGhKJ948n/+gOdaH2Qp88HU/+8eSvJ1rcagzXJ5+0H51O4vbkrycanUWWSvbO+5Do5fRnR2FYIi6kdDWxWReg6/BhTw+GOFG4dTpscmd+SozvOrMuaA/uhazeGlKJj8gpd+aRfxRi3gcwhmt2u55owMcQ8cJgKp4t1SWmhaXE3rm4RWpfGomRzOitxObivvwVjBfRHlxina3sDvX+LOMRkk9XXsgvXjwd0RM5plvi5+5QJ6d8VTzVxo7+snh/3mfirya2nmhxYk4H+p2u6NgYrsVUEzHrZm73jsUHkR+4Qx06duQHLOw+6JOnQGgJIj9wOmAMV+IFi9VEo+PZUquJBmzNeLXURhkt6XZ3qIM2cnMkJsyy+2A6TyMDTIdmCP0ZHZze0R3qwhPFj1NyyCieo43cC+fLjzWH+CB6GhlAzrqo+PirON/rRmIRNz0z2ftHxtt9+gaQa/IdRuLVuXL7HsV7QeQF7kCHth15AQu7D/pkGQgtdJgxWEVe4LSBXLBYTTQ6XlzKHegApiOsltooXjO9Fx1pmQCmky8xnglvoReWCdrIFWctRwYAWznO/3pWbw2pxIdesBno0LZDL+CxaMNZS+jZPYCelTne7oE+Xqa7VmMNoG1e6E1MPAtxpJjM9cTIgJ61GmtsWcuEtr0Z6MZgld6Fr7Zoxyukb0sL+cWHy5EBIBwWUWiLveJZgzbaZC5FP1iZ4u1eYouL4sPlyODvx/XEqGmzx/IJPbsHZq/NX6/VWDMXgmCyFL/ga75v8dHJO4TegZ3yIRnPY/HH5cFzotcyhW8L7jesPb3UZqAD6OMlv45/OieNmXG2zmagA5iLPIl5dg9AnLtogzD3EC7vDT6ZD7NMYYrdE8eXGFF0kkX8yyHEeDmEL89jTR8vD+HLYfNZNz4/V7KLVOJ/SRCLNiRo2w2ksbw3wFxYJmj3f1a0hUzif/zCqC1kER+i+HojRPFqBopXNOoQv0NkpVrx1yto3/ibBKQw+/2+8Nzc4isr90QKU4f46so9kcLUI76q4i+kMCheUeoTDwAoXh7qEE8qO8lvv8st90RiHu/YXxha022iZzttnTfVJT7yjxH/y0eJVX8I4/GOu328A7h7JNfbaSvzXWhEvOgexVfA4x0VvZ22oDXd8nuRWsQHkR8kxANAKVV/SAbiJ541SCSeuEfxJbOdts60NyieVHaeWS+l3BMR2U5bWV/NmxQfekGYtF5O1R/CSf0Hn+iSQnyJ5Z4IZTttXdLemHhaQUvFl1vuiVDiH+Ip4lvQmHhS2QkApZd7IoWpR3xV5Z5IYWoRf7kGCMU3ReXir9fTvbH4CykMilcUFK8olYvPU+65R5qgWvGFV0ekBcUrCopXFBSvKCheUVC8oqB4RUHxioLiFQXFKwqKVxQUrygoXlFQvKKgeEVB8YqC4hXlNx6OZoBg5CNAAAAAAElFTkSuQmCC" alt="" />
FOUND_ROWS()得到的数字是临时的,执行下一条语句就会失效。所以保存在一个变量中为我们所用就OK了。
利用mysql中的SQL_CALC_FOUND_ROWS 来实现group by后的记录数统计的更多相关文章
- mysql中的with rollup得到group by的汇总信息
使用mysql中的with rollup可以得到每个分组的汇总级别的数据: 表如下: CREATE TABLE `test3` ( `id` int(5) unsigned NOT NULL AUT ...
- group by 获取总记录数
sql中有group buy 后如何获取总记录的条数,来生成分页 当然一般情况下我是不推荐这样的分页,如果你真的需要应该是你表结构设计有问题 1.适用于所有情况 $db = new PDO(DSN.. ...
- MySql中对Group by后的结果数进行Count
今天在写MySQ的SQL语句的时候遇到了一个奇怪的问题 select count(*) from subsitealbum t1, photo t2,files t3 where t1.SourceA ...
- 利用MySQL中的乐观锁和悲观锁实现分布式锁
背景 对于一些并发量不是很高的场景,使用MySQL的乐观锁实现会比较精简且巧妙. 下面就一个小例子,针对不加锁.乐观锁以及悲观锁这三种方式来实现. 主要是一个用户表,它有一个年龄的字段,然后并发地对其 ...
- 利用mysql中if函数排序
格式:IF(Condition,A,B) 意义:当Condition为TRUE时,返回A:当Condition为FALSE时,返回B. 作用:作为条件语句使用. select if(`from_use ...
- MySQL中varchar类型在5.0.3后的变化
1.mysql varchar类型变化:mysql 5.0.3 之前: 0--255字节 varchar(20)中的20表示字节数,如果存放urf8编码的话只能放6个汉字. MySQL 5.0.3 之 ...
- 关于MySQL中查询结果的count和from后的条件与where后的条件对比
啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦 ...
- SQL分组多列统计(GROUP BY后按条件分列统计)
as tjsl from fyxx group by zt,whbmbh end) as ybhsl from fyxx group by whbmbh 下面是摘自别人的博客 最近遇到一个问题,需要对 ...
- 【数据库】SQL分组多列统计(GROUP BY后按条件分列统计)
select whbmbh ,zt,1 as tjsl from fyxx group by zt,whbmbh select whbmbh,sum(case zt when '有效' then 1 ...
随机推荐
- [wikioi]最长严格上升子序列
http://wikioi.com/problem/1576/ 经典的动态规划.我写了个o(n^2)的DP方法. PPT:http://wenku.baidu.com/view/bd290294dd8 ...
- VC禁止在任务管理器中结束本进程
转自百度空间:http://hi.baidu.com/175943462/item/657905e13b73b70b8d3ea8bb 一提到进程保护特别是在Windows下,没有最安全,只有更安全.下 ...
- BZOJ3156: 防御准备
3156: 防御准备 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 442 Solved: 210[Submit][Status] Descript ...
- Hash Killer I II
题意大概: 1.字符串hash不取模,自动溢出 构造数据卡这种hash 2.字符串hash取模1000000007,构造数据卡这种hash 题解传送门:VFleaKing http://vfleak ...
- 【log4js】
手动创建日志目录 定时清理 nodejs之日志管理 玩转Nodejs日志管理log4js access.log-2015-11-20
- Ext.MessageBox的用法
1.Ext.MessageBox.alert()方法 有四个参数:alert( title , msg , function(){} ,this) 其中title,msg为必选参数,function为 ...
- 《C程序设计语言现代方法》第5章 选择语句
关系运算符的优先级低于算术运算符,关系运算符都是左结合的. 判等运算符的优先级低于关系运算符,判等运算符也是左结合的. 逻辑运算符将任何非零值操作数作为真值来处理,同时将任何零值操作数作为假值来处理. ...
- 2013 ACM区域赛长沙 K Pocket Cube hdu 4801
题意:给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<=7)步内.最多能翻出几面相同的. 直接打表模拟每种翻转情况 #include<cstdio> #in ...
- Bzoj 2749: [HAOI2012]外星人 欧拉函数,数论,线性筛
2749: [HAOI2012]外星人 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 568 Solved: 302[Submit][Status][ ...
- 矩阵乘法 and BIOS loads MBR into 0x7C00?
tianpeng <再谈矩阵与矩阵乘法> 讲的也好 矩阵乘矩阵 这个结果是怎么算出来的? 第一个矩阵第一行的每个数字(2和1),各自乘以第二个矩阵第一列对应位置的数字(1和1),然后将乘积 ...