日志统计功能

今天做统计日志功能,前台选定一个用户,把那个用户的id传到后台,后台把关于这个用户的所有日志按照每个月统计出来,前台页面要把选定的用户的每月的写日志的多少显示出来,如果该月没有写就显示0。

mybatis代码:

<select id="count" resultType="map" parameterType="int">
select count(body) as num,month(createDate) as date
from log
where year(createDate) = '2016' AND userid = #{userid}
group by month(createDate)
</select>

问题:如果就用上面语句查询,最后的查询出的结果只会显示写了日志的月份和该月写的日志的数量,而那些没有写日志的月份则不会显示

解决办法:先手动创建12个月,给每月的日志的初始值为0遍。

List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
//手动创建12个月
for(int i = 1;i<=12;i++) {
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("date", i);//把月份存放到map中
map1.put("num", 0);//给每个月的日志数量初始化为0篇日志
list1.add(map1);//把map放到一个list中
}

然后在去数据库把查询出来的写了日志的月份与手动创建的月份比较,如果相等就把数据库里面的日志数量赋值给该月

for(Map<String, Object> map:list) {
//遍历手动创建的12个月每个月写日志的数量
for(Map<String, Object> map2 :list1) {
//比较有没有相等的月份
if(map.get("date").equals(map2.get("date"))) {
//给写了日志的月份的数量赋值,这个值是从数据库中取出来的,把原来的日志数量替换
map2.put("num", map.get("num"));
}
}
}

最后再把list1传到前台取出就OK了。

posted @ 2016-12-07 17:50  crud程序员  阅读(738)  评论(0编辑  收藏  举报