PHP怎么获得mysql分组后记录查询总数。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP怎么获得mysql分组后记录查询总数。相关的知识,希望对你有一定的参考价值。
我有一个表,首先要分组,然后计算分组的记录总条数。 mysql语句写出来了,但是不知道怎么用php输出。 SELECT count(aid) FROM table group by aid //获得每个分组的记录查询数。 现在的问题就是不知道怎么从PHP获得这些值。
参考技术A if(mysql_connect('
localhost
','root','root'))
$query
=
"SELECT
count(aid)
as
ct
FROM
table
group
by
aid";//
从数据库中读取数据
,count出来加了别名ct用来获取数据时标示
字段名
用
if
($result=@mysql_query($query))
while($rows=@
mysql_fetch_array
($result))
$rows[ct];//这里循环处理每一行ct字段的值
mysql_free_result
($result);
mysql分组排序后取出几条记录,
取出该表中条数为 floor(总数*0.8)的数据,比如cc字段中值为qqqq的应取出floor(总数*0.8) 即4条,cc字段中值为ssss的是5条,dddd字段的是6条
即查询出每组前floor(总数*0.8)条记录
# 只能通过变通的子查询和逻辑计算方式来实现,对于中小数据量可以考虑
-- rank 排名实现
select inline_rownum, aa, cc, amt, orderid FROM
(
select
# logic_cal 只是实现计数器计算的,每次逐条查询时会对比当前 cc 与 @last_cc 是否相同,如果不同则把当前该列值赋于 @last_cc 并重设计数器 @num := 1,否则计数器自加 @num := @num + 1
(case when cc <> @last_cc then concat(@last_cc := cc, @num := 1 ) else concat(@last_cc, @num := @num + 1) end ) logic_cal
, @num as inline_rownum
, aa, cc, amt, orderid
from tb_rank,
( select @last_cc := '') t, # 初始化 @last_cc 为 '', 如要检查的列(基于计数器统计的列)是int型,则初始化为0; varchar型初始化为''
( select @num := 0 ) t2 # 初始化@num为0
order by cc, orderid asc # 排序的方式会影响@num的生成,因为logic_cal是逐行计算的
) t
where inline_rownum <= floor(amt*0.8) #限制条数,取常量值或其他
order by cc,orderid asc
; 参考技术A
每一组 你要显示几条数据?
用group by cc
看看是你想要的吗?
select reason,floor(总数*0.8) from 表明 group by cc order by cc ;追问你看我的截图
参考技术B select 字段1,字段2,。。。。。。 from 表 order by 字段 limit n追问谢谢你的回答 ,但是这个实现不了我的要求
以上是关于PHP怎么获得mysql分组后记录查询总数。的主要内容,如果未能解决你的问题,请参考以下文章
PHP查询mysql的时候用了like和LIMIT分页,如何获得未分页但是like了的总数据量
怎么在java中获得mongodb分组group的结果中的总数量