2017-12-18 174 views
0

我有两个表的用户,并login_tableMySQL的生成年度报告的一个月明智的工作人员的名字

用户表

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

因此,今年是在输入权? –

+0

是的,我们会过年。 –

+0

认真考虑处理应用程序代码中的数据显示问题(本例中为PHP) – Strawberry

回答

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