我有以下表结构:
用户
| id | name
|----|------
| 1 | Pete
| 2 | Jeff
| 3 | Bob
属性
| user_id | key | value
|---------|--------|------
| 1 | Age | 24
| 1 | Gender | M
| 1 | City | New York
| 2 | Age | 26
| 2 | Gender | M
| 3 | Age | 30
| 3 | Eyes | Blue
现在我需要将这些值“分组”到(mysql)表中,以便稍后我可以过滤/排序/ ...
预期结果
| Name | Age | Gender | City | Eyes
|------|-----|---------|----------|-------
| Pete | 24 | M | New York |
| Jeff | 26 | M | |
| Bob | 30 | | | Blue
以这种方式存储它的原因是每个用户都可以定义它的“自己的”属性。
目前我在代码中创建/过滤/排序此表,但是我想知道是否可以使用mysql完成 - 使用mysql过滤/排序这个最后一个表确实非常方便。
但请注意,行数非常大(数十万到数百万)。
我的具体问题如下:
我正在寻找解决此类数据“分组”的一般提示/建议,指南或可能的替代方案。
答案 0 :(得分:0)
我不知道你正在尝试的东西存在的工具,但我可以肯定地为你提供一个可以帮助你的以下查询。
SELECT
u.name as 'Name',
j1.value as 'Age',
j2.value as 'Gender'
j3.value as 'City'
j4.value as 'Eyes'
FROM
Users u
LEFT JOIN Properties j1 ON (u.id = j1.user_id AND j1.key = 'Age')
LEFT JOIN Properties j2 ON (u.id = j2.user_id AND j2.key = 'Gender')
LEFT JOIN Properties j3 ON (u.id = j3.user_id AND j3.key = 'City')
LEFT JOIN Properties j4 ON (u.id = j4.user_id AND j4.key = 'Eyes')
ORDER BY u.id;