ColdFusion使用query group后如何统计分组后的总行数?
解决ColdFusion分组后获取每组行数的问题
为什么listlen(#my_location#)没用?
my_location是当前分组对应的单个区域值(比如"北京"、"上海"),不是由同组所有记录值组成的列表,所以listlen()只会返回1——它本质就是一个普通字符串,不是多值列表。
两种正确解决方案
方案1:直接在SQL查询中统计分组行数(推荐)
让数据库直接完成分组统计,效率更高,代码也更简洁:
<cfquery datasource="go_green" name="rank_community"> SELECT area AS my_location, COUNT(*) AS location_count FROM GREENTEAM_USERS GROUP BY area ORDER BY area </cfquery> <cfoutput query="rank_community"> <tr leader-board-community> <td leaderboard-counter></td> <td align="left">#my_location#</td> <td align="left">#location_count#</td> </tr> </cfoutput>
通过COUNT(*)直接统计每个area对应的用户数量,查询结果已经是分组好的统计数据,无需再用cfoutput的group属性。
方案2:使用ColdFusion内置分组变量(无需修改查询)
如果不想调整SQL,ColdFusion 9及以上版本提供了queryName.groupRecordCount变量,自动返回当前分组的记录总数:
<cfquery datasource="go_green" name="rank_community"> SELECT area AS my_location FROM GREENTEAM_USERS order by area </cfquery> <cfoutput query="rank_community" group="my_location"> <tr leader-board-community> <td leaderboard-counter></td> <td align="left">#my_location#</td> <td align="left">#rank_community.groupRecordCount#</td> </tr> </cfoutput>
这个变量是ColdFusion执行带group的cfoutput时自动生成的,直接调用就能拿到当前分组的总行数。
如果是ColdFusion 9以下版本,可嵌套cfoutput手动计数:
<cfoutput query="rank_community" group="my_location"> <cfset count = 0> <cfoutput> <cfset count++> </cfoutput> <tr leader-board-community> <td leaderboard-counter></td> <td align="left">#my_location#</td> <td align="left">#count#</td> </tr> </cfoutput>
内层cfoutput遍历当前分组的所有记录,通过自增变量统计总数。
内容的提问来源于stack exchange,提问作者11lll
相关产品推荐
相关产品推荐

