查询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串起来大于这个就会出问题,所以解决方法就是改掉这个默认值了