php - 在 MySQL 或 PHP 中显示每个人数据的列表日期
问题描述
我有名为 absen_calendar 和 absen 的表,absen_calendar 仅包含从 2018-11-01 到 2018-11-30 的日期列表。
absen_calendar
| dateCalendar |
| 2018-11-01 |
| ... |
| 2018-11-30 |
和另一个名为“absen”的表。
absen
personName | personDate | personTime | personInfo
Joko | 2018-11-01 | 07:26:00 | IN
Eko | 2018-11-20 | 07:03:00 | IN
Wahyu | 2018-11-15 | 17:11:00 | OUT
Joko | 2018-11-01 | 17:40:00 | OUT
我正在尝试在 dateCalendar 中为缺席表中的每个 personName 显示列表日期。有时 1 个人在 personDate 中可能只有 1 个 personInfo。
result
dateCalendar | personName | personTimeIN | personTimeOUT
2018-11-01 | Joko | 07:26:00 | 17:40:00
2018-11-02 | Joko | NULL | NULL
...
2018-11-30 | Joko | NULL | NULL
2018-11-01 | Eko | NULL | NULL
...
2018-11-30 | Eko | NULL | NULL
2018-11-01 | Wahyu | NULL | NULL
...
2018-11-15 | Wahyu | NULL | 17:11:00
...
2018-11-30 | Wahyu | NULL | NULL
这是我的查询:
SELECT
d.dateCalendar,
a_in.personName,
a_in.personTime AS personTimeIN,
a_out.personTime AS personTimeOUT,
FROM absen_calendar d
LEFT JOIN absen a_in
ON a_in.personDate = d.dateCalendar
AND a_in.personInfo = 'IN'
LEFT JOIN absen a_out
ON a_out.personDate = d.dateCalendar
AND a_out.personInfo = 'OUT'
如何在 MySQL 或 PHP 中执行此操作?提前致谢。
解决方案
你可以试试这个。
CROSS JOIN
与absen_calendar
table 一起使用为名称和日历制作一个完整的表格,然后根据结果集制作absen
表格。OUTER JOIN
然后CASE WHEN
与MAX
do pivot 一起使用。
SELECT ac.dateCalendar,
name.personName,
MAX(CASE WHEN personInfo ='IN' THEN personTime end) personTimeIN ,
MAX(CASE WHEN personInfo ='OUT' THEN personTime end) personTimeOUT
FROM absen_calendar as ac
cross join (select distinct personName from absen) name
LEFT JOIN absen a on a.personDate =ac.dateCalendar and a.personName = name.personName
GROUP BY
ac.dateCalendar,
name.personName
推荐阅读
- python - 循环遍历具有真/假的列表列表?
- javascript - 在 create-react-app 项目中放置 webpack.config.js 的位置
- r - 如何在 R Shiny 中向数据表行名添加工具提示?
- android - 外键约束冲突在 Sqlite (android studio) 中不起作用
- django - 在 django 中使用 Allauth 社交注册的用户模型?
- reactjs - Redux-persist 迁移不迁移
- javascript - jQuery触发一个事件来改变文本值
- c# - 找不到方法:'System.Runtime.CompilerServices.CallSiteBinder Microsoft.CSharp.RuntimeBinder.Binder.Convert
- java - 验证 (PDF/PKI) 签名的必要步骤
- autodesk-forge - 模型实例化和转换