记录:
要求使用sql将,friends表中的所有id换成名字。
参考了几个解决方案,才写出来
+----+-----------+
| id | name |
+----+-----------+
| 1 | 曹炜 |
| 2 | 陈健 |
| 3 | 葛丁鹏 |
| 4 | 黄亿冉 |
| 5 | 吉伟桥 |
| 6 | 李克坚 |
| 7 | 李凌峰 |
| 8 | 刘康 |
| 9 | 刘瑗珲 |
| 10 | 裴兴童 |
| 11 | 蒲心原 |
| 12 | 瞿泳 |
| 13 | 孙宇航 |
| 14 | 唐杨漩 |
| 15 | 田旭 |
| 16 | 徐虎 |
| 17 | 许建飞 |
| 18 | 杨靖 |
| 19 | 张朝东 |
| 20 | 张锦乐 |
| 21 | 赵勇智 |
| 22 | 赵宗达 |
| 23 | 朱小宇 |
| 24 | 朱志明 |
| 25 | 陈素珍 |
| 26 | 岳双林 |
| 27 | 苏航 |
| 28 | 秦帅 |
| 29 | 封士光 |
+----+-----------+
mysql> select * from friends;
+----+--------------------------+
| id | friends |
+----+--------------------------+
| 1 | 7,12,22,2,18 |
| 2 | 18,15,23,11,3,1,2 |
| 3 | 15,21,8,10,3,27,4,11 |
| 4 | 15,16,25,9,8,28,22,11 |
| 5 | 28,16,2,19,1,24 |
| 6 | 14,4 |
| 7 | 27 |
| 8 | 28,19,21,5,17,23,14,24,2 |
| 9 | 6,5,14,15,18,13,22 |
| 10 | 27,25,22,23,2 |
| 11 | 9,24,3,28 |
| 12 | 11,6,18 |
| 13 | 2,22 |
| 14 | 22,13,10,25,28 |
| 15 | 24 |
| 16 | 2,4,7,19,13,21,10,9 |
| 17 | 20 |
| 18 | 16,20,5,11,21,1,25,12 |
| 19 | 25,4,13,21,17 |
| 20 | 2 |
| 21 | 27 |
| 22 | 18 |
| 24 | 2,7,3,9,15,14,1,17 |
| 25 | 6,7,2,21,16,18,11,9 |
| 26 | 3,1 |
| 28 | 14,1,3,4 |
+----+--------------------------+
解决方法:
select name, group_concat(friend separator ',') as friends
from(
select
a.id,
(select u.name from users u where u.id=a.id) as name,
(select u.name from users u where u.id=substring_index(substring_index(a.friends,',',b.id),',',-1)) as friend
from friends as a join users as b on b.id <= (char_length(a.friends) - char_length(replace(a.friends,',',''))+1)
)A
group by name
order by A.id;
查询结果:
+-----------+-------------------------------------------------------------------------------------+
| name | friends |
+-----------+-------------------------------------------------------------------------------------+
| 曹炜 | 杨靖,瞿泳,陈健,李凌峰,赵宗达 |
| 陈健 | 曹炜,朱小宇,葛丁鹏,田旭,陈健,蒲心原,杨靖 |
| 葛丁鹏 | 蒲心原,葛丁鹏,赵勇智,黄亿冉,裴兴童,田旭,苏航,刘康 |
| 黄亿冉 | 秦帅,陈素珍,蒲心原,刘康,徐虎,赵宗达,刘瑗珲,田旭 |
| 吉伟桥 | 秦帅,朱志明,陈健,曹炜,徐虎,张朝东 |
| 李克坚 | 黄亿冉,唐杨漩 |
| 李凌峰 | 苏航 |
| 刘康 | 陈健,朱小宇,赵勇智,朱志明,许建飞,张朝东,唐杨漩,吉伟桥,秦帅 |
| 刘瑗珲 | 孙宇航,唐杨漩,杨靖,吉伟桥,赵宗达,田旭,李克坚 |
| 裴兴童 | 陈健,陈素珍,朱小宇,苏航,赵宗达 |
| 蒲心原 | 葛丁鹏,朱志明,秦帅,刘瑗珲 |
| 瞿泳 | 蒲心原,杨靖,李克坚 |
| 孙宇航 | 陈健,赵宗达 |
| 唐杨漩 | 秦帅,孙宇航,陈素珍,赵宗达,裴兴童 |
| 田旭 | 朱志明 |
| 徐虎 | 刘瑗珲,孙宇航,黄亿冉,裴兴童,张朝东,陈健,赵勇智,李凌峰 |
| 许建飞 | 张锦乐 |
| 杨靖 | 瞿泳,赵勇智,张锦乐,陈素珍,蒲心原,徐虎,曹炜,吉伟桥 |
| 张朝东 | 孙宇航,许建飞,黄亿冉,赵勇智,陈素珍 |
| 张锦乐 | 陈健 |
| 赵勇智 | 苏航 |
| 赵宗达 | 杨靖 |
| 朱志明 | 唐杨漩,葛丁鹏,许建飞,田旭,李凌峰,曹炜,刘瑗珲,陈健 |
| 陈素珍 | 蒲心原,赵勇智,李克坚,杨靖,陈健,刘瑗珲,徐虎,李凌峰 |
| 岳双林 | 曹炜,葛丁鹏 |
| 秦帅 | 葛丁鹏,曹炜,黄亿冉,唐杨漩 |
+-----------+-------------------------------------------------------------------------------------+