查询Mysql数据库中以逗号分隔id存储的字段信息,id对应的详细信息在另一个表中

有两张表,

一张为资产表b表

一张为用户表 u表

u表

id 名称 资产Id
1 小红 1,2,3
2 小明 2,5

b表

id   名称
1    房子
2    车子
3   股票
4    基金
5   债券

正常查询u表

select * from u

现在需求是:

id   名称   资产
1   小红     房子,车子,股票
2 小明    车子,债券

修改sql为

select u.id,u.名称,group_concat(b.名称 orderby b.id separator "----") from u left join b on find_in_set(b.id,u.资产Id) group by u.id;     

注意:有时候mysql会报错:

mysql 错误Row xx was cut by GROUP_CONCAT()

解决办法:

1.在MySQL配置文件中加上

group_concat_max_len = 102400 #你要的最大长度

2.可以简单一点,执行语句:

mysql> SET GLOBAL group_concat_max_len=102400;
Query OK, 0 rows affected (0.01 sec)

原理:

GROUP_CONCAT有个最大长度的限制,超过最大长度就会被截断掉,你可以通过下面的语句获得:

mysql> SELECT @@global.group_concat_max_len;
@@global.group_concat_max_len
1024

1024这就是一般MySQL系统默认的最大长度,如果你的bid串起来大于这个就会出问题,所以解决方法就是改掉这个默认值了