php - 将多行合并为表中的单行
问题描述
所以我正在开发一个简单的 IN/OUT 板系统来跟踪谁进入和离开并抓拍他们的照片。
我让每个 IN/OUT 进入访问表。
使用权
ID | 用户身份 | 约会时间 | 方向 | 图片 |
---|---|---|---|---|
4 | 1 | 2021 年 5 月 6 日 16:04 | 在 | 1-1621019890.png |
5 | 1 | 2021 年 5 月 8 日 13:25 | 出去 | 1-1621019891.png |
9 | 1 | 2021 年 5 月 10 日 16:14 | 在 | 1-1621019892.png |
12 | 1 | 2021 年 5 月 11 日 13:58 | 出去 | 1-1621019893.png |
15 | 1 | 2021 年 5 月 11 日 14:02 | 在 | 1-1621019894.png |
22 | 1 | 2021 年 5 月 11 日 14:31 | 出去 | 1-1621019895.png |
25 | 1 | 2021 年 5 月 11 日 14:32 | 在 | 1-1621019896.png |
26 | 1 | 2021 年 5 月 11 日 14:34 | 出去 | 1-1621019897.png |
28 | 1 | 2021 年 5 月 11 日 15:02 | 在 | 1-1621019898.png |
29 | 1 | 2021 年 5 月 11 日 15:04 | 出去 | 1-1621019899.png |
32 | 1 | 2021 年 5 月 11 日 15:04 | 在 | 1-1621019880.png |
33 | 1 | 2021 年 5 月 11 日 18:09 | 出去 | 1-1621019870.png |
34 | 1 | 2021 年 5 月 11 日 19:05 | 在 | 1-1621019860.png |
35 | 1 | 2021 年 5 月 14 日 19:16 | 出去 | 1-1621019808.png |
38 | 1 | 2021 年 5 月 14 日 19:18 | 在 | 1-1621019888.png |
39 | 1 | 2021 年 5 月 14 日 19:19 | 出去 | 1-1621019967.png |
我正在尝试找到一个 SQL 查询,该查询将输出类似于以下内容:
用户身份 | 在 | 图像内 | 出去 | 外像 | 总时间 |
---|---|---|---|---|---|
1 | 2021 年 5 月 6 日 16:04 | 1-1621019890.png | 2021 年 5 月 8 日 13:25 | 1-1621019891.png | |
1 | 2021 年 5 月 10 日 16:14 | 1-1621019892.png | 2021 年 5 月 11 日 13:58 | 1-1621019893.png | |
1 | 2021 年 5 月 11 日 14:02 | 1-1621019894.png | 2021 年 5 月 11 日 14:31 | 1-1621019895.png | |
1 | 2021 年 5 月 11 日 14:32 | 1-1621019896.png | 2021 年 5 月 11 日 14:34 | 1-1621019897.png | |
1 | 2021 年 5 月 11 日 15:02 | 1-1621019898.png | 2021 年 5 月 11 日 15:04 | 1-1621019899.png | |
1 | 2021 年 5 月 11 日 15:04 | 1-1621019880.png | 2021 年 5 月 11 日 18:09 | 1-1621019870.png | |
1 | 2021 年 5 月 11 日 19:05 | 1-1621019860.png | 2021 年 5 月 14 日 19:16 | 1-1621019808.png | |
1 | 2021 年 5 月 14 日 19:18 | 1-1621019888.png | 2021 年 5 月 14 日 19:19 | 1-1621019967.png |
如果我也能用它来计算总时间,那就太好了,但在最坏的情况下,我可以在 PHP 中做到这一点。
通过进行大量搜索,我似乎需要在我的 MySQL 查询中设置一个 PIVOT,但没有看到如何使用多个列来做到这一点。
解决方案
如果您的数据是常规的(In 行没有遗漏 Out 行)
select user_id,
max(case when direction='In' then datetime end) in,
max(case when direction='In' then image end) in_image,
max(case when direction='Out' then datetime end) out,
max(case when direction='Out' then image end) out_image
from (select *,
row_number() over(partition by user_id, direction order by datetime) rn
from yourtable) t
group by user_id, rn
推荐阅读
- svg - svg + inkscape + 不需要的裁剪
- r - 编译后R包`libs`目录太大,无法在CRAN上提交
- plot - 在 Mathematica 中使用 Plot3D 绘制 2D 空间 + 时间的函数
- python-3.x - 使用 Python3 在 Flask 中访问数据库时出现未绑定的本地错误
- typescript - 来自枚举和接口的自定义键/值类型
- javascript - ng-fullcalendar - 事件接收
- android - 我可以在没有 Sceneform 或 OpenGL 的情况下连接到 ARCore 的更新循环吗?
- javascript - 通过单击带有 JS 的按钮来更改段落元素
- azure-digital-twins - Azure 数字孪生和 Azure IoT Edge
- sql-server - dapper multli 内连接和左连接映射