我有一个(工作)转移表,如下所示:
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
我只是想不出一种方法来像这样格式化而不是每天查询或每天为每个员工添加班次(=许多空条目,因为并非每个员工每天都要工作)。 如果有帮助,仍然可以更改表格设置。
答案 0 :(得分:1)
您可以将其存储在2 dimensional array
$shifts[employeename][date]
以下是此示例代码。
foreach($rows as $row)
{
$shifts[$row['name']][$row['date']] = $row['start'] . ' ' . $row['end'];
}