Php MySQL每月生成员工姓名的年度报告

Php MySQL每月生成员工姓名的年度报告,php,mysql,sql,phpmyadmin,Php,Mysql,Sql,Phpmyadmin,我有两个用户表和登录表 用户表 id Name status ---------------------- 1 Johan 1 2 Smith 1 . . . . ---------------------- 登录表 id user_id login_date hours ------------------------------------- 1 1 20

我有两个用户表和登录表

用户表

 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获取此信息?

我不知道什么是
索引,但其余的是连接、
分组方式和条件聚合:

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;
选择u.id、u.name、,
截至1月的总和(如果月份(l.login_date)=1,则小时数为0),
总和(如果月份(l.login_date)=2小时,否则0小时结束)为2月,
. . .,
总数(小时)
来自你加入的用户
登录名l
on u.id=l.login\u id
其中l.login_日期>='2017-01-01'和l.login_日期<'2018-01-01'
按u.id、u.name分组;
注:


  • 日期比较使用
    =
    我不知道
    索引是什么,但其余的是联接、
    分组依据和条件聚合:

    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;
    
    选择u.id、u.name、,
    截至1月的总和(如果月份(l.login_date)=1,则小时数为0),
    总和(如果月份(l.login_date)=2小时,否则0小时结束)为2月,
    . . .,
    总数(小时)
    来自你加入的用户
    登录名l
    on u.id=l.login\u id
    其中l.login_日期>='2017-01-01'和l.login_日期<'2018-01-01'
    按u.id分组,u.name;
    
    注:


      <> LI>日期比较采用<代码> > <代码> >代码>所以输入是右的。YUP,我们将通过一年。认真考虑应用程序代码中的数据显示问题(PHP,在这种情况下),因此输入年是正确的。YUP,我们将通过一年。认真考虑应用程序代码中的数据显示问题(PHP,在这种情况下)