每个用户行的当前每月统计数据

时间:2014-03-29 08:36:13

标签: mysql

我在第75组(user_group)中有23个用户。

然后我有表users_participated仅在用户参与时设置行(有时它存在但是为0(不参与))。

现在我需要向每个用户展示他每个月参与的每一天。

我可以用php循环来做。但我想知道是否有办法只使用单个mysql查询。

   //output html table should look like y = yes n = no 1,2,3,5 are days in month
   user | 1 | 2 | 3 | 4 | 5.. 
   user1| y | n | y | n | n
   user2| n | y | y | n | y

   // user table
   id | user   | group
   1  | user1  |  75
   2  | user2  |  75
   3  | user3  |  75
   4  | user4  |  68

   //participate table
   user_id | participated | date_added
      1    |  1           | 2014-03-29 11:03:00
      2    |  0           | 2014-03-29 11:03:00

//有时它可以是0,有时如果它为null,如果你知道我的意思,它甚至不在这个表中。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

简单的交叉表查询可以做到这一点:

SELECT u.user,
       max( if(day(p.date_added) = 1, p.participated, 0 ) ) day1,
       max( if(day(p.date_added) = 2, p.participated, 0 ) ) day2,
       ..............
       ..............
       ..............
       max( if(day(p.date_added) = 28, p.participated, 0 ) ) day28,
       max( if(day(p.date_added) = 29, p.participated, 0 ) ) day29,
       max( if(day(p.date_added) = 30, p.participated, 0 ) ) day30,
       max( if(day(p.date_added) = 31, p.participated, 0 ) ) day31
FROM user u
JOIN participate p
ON u.id = p.user_id
WHERE p.date_added >= '2014-03-01'
  AND p.date_added < '2014-04-01'
GROUP BY u.id

演示:http://sqlfiddle.com/#!9/cd31f/3