mysql-逗号分隔的id转为逗号分隔的名称(find_in_set) 作者:马育民 • 2021-10-09 16:50 • 阅读:10287 # 提出问题 如下图,该表中 `likes` 字段的值,是由 `,` 分割的多个 `id`: [![](https://www.malaoshi.top/upload/pic/mysql/QQ20211009204709.png)](https://www.malaoshi.top/upload/pic/mysql/QQ20211009204709.png) 关联表 `t_like` 如下图: [![](https://www.malaoshi.top/upload/pic/mysql/QQ20211009204718.png)](https://www.malaoshi.top/upload/pic/mysql/QQ20211009204718.png) 查询结果如下图,将id翻译成对应的值: [![](https://www.malaoshi.top/upload/pic/mysql/QQ20211009205126.png)](https://www.malaoshi.top/upload/pic/mysql/QQ20211009205126.png) ### 解决 ``` select b.username,GROUP_CONCAT(a.name) as likes from t_like a,student b where FIND_IN_SET(a.id,b.likes) > 0 group by b.likes ``` ### 作用 `FIND_IN_SET(a.id,b.likes) > 0` 含义如下: `FIND_IN_SET(a.id,b.likes)` 返回的是 `a.id` 在 `b.likes` 中第一次出现的位置,从 `1` 开始,如果返回值大于 `0` ,就说明 `b.likes` 中包括了 `a.id`,将这些记录查询出来 然后在 根据 `b.likes` 分组,分组后,将 `a.name` 的值 **连接** (`CONCAT`) 起来,由 `,` 分割 [mysql-一对多查询,一行显示(group_concat)](https://www.malaoshi.top/show_1IX20iDiIkMB.html "mysql-一对多查询,一行显示(group_concat)") 原文出处:http://malaoshi.top/show_1IX20mmsN5rz.html