最近正在做一个显示消息的列表页,列表页中需要根据一个字段来分组显示。并且需要一个分页的效果。
大家也知道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 后的总记录数,如下图:
FOUND_ROWS()得到的数字是临时的,执行下一条语句就会失效。所以保存在一个变量中为我们所用就OK了。