【发布时间】:2021-12-27 17:02:26
【问题描述】:
我有两张桌子:
-
users包含我所有具有共同属性的用户 -
metas在一对多关系中保存所有动态属性,(仅供参考,我无法将这些属性合并到users表中,因为它们可以即时创建/删除)。
用户
| id | name | |
|---|---|---|
| 1 | John | j@d.com |
| 2 | Jane | a@d.com |
元
| user_id | name | value |
|---|---|---|
| 1 | created_at | "2021-01-01" |
| 1 | logged_at | "2021-01-01" |
| 2 | created_at | "2021-01-01" |
问题
我想构建一个 SQL 查询,结果如下所示,这样我就可以对用户元数据有一些位置和顺序。
| id | name | created_at | logged_at | |
|---|---|---|---|---|
| 1 | John | j@d.com | 2021-01-01 | 2021-01-01 |
| 2 | Jane | a@d.com | 2021-01-01 | NULL |
进展
我设法构建了一个结果,但只有一个元(created_at)而不是logged_at,因为我无法为同一个用户分组许多元行。
SELECT users.*, CAST(JSON_UNQUOTE(value) AS DATE) as created_at
FROM users
LEFT JOIN metas on users.id = metas.user_id and metas.name = 'created_at'
ORDER BY created_at desc
约束
- 应该在单个查询中完成,不能从代码端完成。
有什么建议吗?
【问题讨论】:
-
为此使用
PIVOT? -
我不知道“枢轴”的概念。在 MySQL 中,没有枢轴机制,但可以使用 @hashed 番茄解决方案来解决。谢谢