我有两个表用户和login_table
用户表
id Name status
----------------------
1 Johan 1
2 Smith 1
. . . .
----------------------
登录表
id user_id login_date hours
-------------------------------------
1 1 2017-01-01 8
2 1 2017-01-02 7
3 2 2017-01-03 12
4 2 2017-01-02 10
. . . .
-------------------------------------
无论如何我们可以获取如下的数据吗?
index user_id name Jan Feb Mar .... Dec Total
---------------------------------------------------------
1 1 Johan 100 120 115 .... 120 455
1 2 Smith 100 110 120 .... 110 440
. . . . . . . .
---------------------------------------------------------
我们已经使用PHP / MYSQL完成了这项工作,但需要花费很多时间来处理和执行。无论如何我们可以直接从MySQL获取它吗?
答案 0 :(得分:4)
我不知道index
是什么,但其余的是联接,group by
和条件聚合:
select u.id, u.name,
sum(case when month(l.login_date) = 1 then hours else 0 end) as jan,
sum(case when month(l.login_date) = 2 then hours else 0 end) as feb,
. . .,
sum(hours)
from users u join
login l
on u.id = l.login_id
where l.login_date >= '2017-01-01' and l.login_date < '2018-01-01'
group by u.id, u.name;
注意:
>=
和<
。这是首选,因为MySQL可以使用数据索引。index
是什么。也许你的意思是status
?