php - 在 MySQL 或 PHP 中显示每个人数据的列表日期

标签 php mysql sql date

我有一个名为 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 中为 absen 表中的每个 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 JOINabsen_calendar 表为名称和日历创建一个完整的表,然后是 absenOUTER JOIN 基于结果集。

然后使用 CASE WHENMAX 做数据透视。

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

sqlfiddle

关于php - 在 MySQL 或 PHP 中显示每个人数据的列表日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52105675/

相关文章:

php - 使用 PHP 从表单获取数据

MySQL 表不是 UTF-8,即使我指示 Hibernate 使用 UTF-8 创建它们

mysql - 我怎样才能对数据库中的多个表或类似的东西进行全局选择?

mysql - SQL,未使用的 LEFT JOIN 变慢,优化器不工作?

mysql - 针对特定问题的复杂 MySQL 查询

sql - SQL Server 2000 中用于存储视频的数据类型

php - 如何使用 Button Manager API 更新托管 PayPal 按钮的价格?

php - 如何从 MAX 和组设置变量?

php - 子域的 Magento cookie 设置

php - 为 PDF 文件生成唯一的下载链接