我希望根据MySQL中的用户ID将单列数据转换为多行 - 我更倾向于使用sql查询而不是外部工具。
我的具体情况似乎很简单,但我没有根据我找到的各种支点问题/答案/例子弄清楚。
这是我目前的表格:
╔════════╦═════════╦═════════╗
║ userID ║ object ║ index ║
╠════════╬═════════╣═════════╣
║ user1 ║ Apple ║ 1 ║
║ user1 ║ Orange ║ 2 ║
║ user1 ║ Pear ║ 3 ║
║ user2 ║ Kiwi ║ 1 ║
║ user2 ║ Melon ║ 2 ║
║ user2 ║ Mango ║ 3 ║
║ user3 ║ Apple ║ 1 ║
║ user3 ║ Melon ║ 2 ║
║ user3 ║ Pear ║ 3 ║
║ user3 ║ Mango ║ 4 ║
╚════════╩═════════╩═════════╝
这是理想的输出:
╔════════╦═════════╦═════════╦═════════╦═════════╗
║ userID ║ 1 ║ 2 ║ 3 ║ 4 ║
╠════════╬═════════╬═════════╬═════════╬═════════╣
║ user1 ║ Apple ║ Orange ║ Pear ║ empty ║
║ user2 ║ Kiwi ║ Melon ║ Mango ║ empty ║
║ user3 ║ Apple ║ Melon ║ Pear ║ Mango ║
╚════════╩═════════╩═════════╩═════════╩═════════╝
有几点需要注意:
我确定这实际上非常简单,而且我在思考它。
编辑:我根据Gordon Linoff的评论略微编辑了表格,以包含我作为初始表格一部分的排序索引。
此外,基于戈登答案的同一问题的替代版本。
如果我事先知道我应该拥有的最大列数(在这个示例中为4对象)是否可以简化事情?例如在运行查询之前,我可以使用5列创建表。
答案 0 :(得分:1)
由于两个重要原因,你无法随心所欲地做到:
可能足够接近的是将所有值放在一列中:
select userId, group_concat(object)
from table t
group by userId;
您可以使用group_concat()
和separator
修改order by
以指定分隔符(默认逗号)或特定排序。
如果您确实需要可变数量的列,则必须使用动态SQL - prepare
和exec
。