格式化查询结果

时间:2017-05-06 17:32:33

标签: php mysql sql

我有一个(工作)转移表,如下所示:

shifts
s_id   e_id    start      end        date
  1      1   06:00:00   08:00:00   2017-05-04
  2      1   09:00:00   13:00:00   2017-05-02
  3      1   06:20:00   15:00:00   2017-05-03
  4      2   02:00:00   05:15:00   2017-05-02
  5      2   12:00:00   13:00:00   2017-05-05
  7      1   08:00:00   17:00:00   2017-05-01
  8      1   08:00:00   17:00:00   2017-05-05
  9      1   08:00:00   17:00:00   2017-05-06
 10      1   08:00:00   17:00:00   2017-05-07
 11      1   08:00:00   17:00:00   2017-04-30

员工表

employees
id    name
1   Employee 1
2   Employee 2
3   Employee 3
5   Employee 4
6   Employee 5

使用查询

select    employees.id as 'emp_id', 
          employees.name, 
          shifts.date, 
          shifts.start, 
          shifts.end 
from      employees 
left join shifts 
on        ((employees.id = shifts.e_id) 
and        (shifts.date between '2017-05-01' and '2017-05-02'))
order by  employees.id, shifts.date

我的结果如下:

emp_id   name        date     start     end
   1   Employee 1 2017-05-01 08:00:00 17:00:00
   1   Employee 1 2017-05-02 09:00:00 13:00:00
   2   Employee 2 2017-05-02 02:00:00 05:15:00
   3   Employee 3    NULL      NULL    NULL
   5   Employee 4    NULL      NULL    NULL
   6   Employee 5    NULL      NULL    NULL

所需的最终结果(使用php格式化)应如下所示:

             2017-05-01        2017-05-02
Employee 1  08:00 - 17:00     09:00 - 13:00
Employee 2     NULL           02:00 - 05:15
Employee 3     NULL              NULL
Employee 5     NULL              NULL
Employee 6     NULL              NULL

我只是想不出一种方法来像这样格式化而不是每天查询或每天为每个员工添加班次(=许多空条目,因为并非每个员工每天都要工作)。 如果有帮助,仍然可以更改表格设置。

1 个答案:

答案 0 :(得分:1)

您可以将其存储在2 dimensional array

$shifts[employeename][date]

以下是此示例代码。

foreach($rows as $row)
{
    $shifts[$row['name']][$row['date']] = $row['start'] . ' ' . $row['end'];
}