Mysql group_concat函数的逆处理
在MYSQL中当我们处理一对多的关系的时,有时需要只输入一条数据。我只通常是通过group_concat函数进行处理,这样数据就会形成a,b,c,d这种格式,即多的那个数据中间会有逗号进行分隔。
如表A和表B的结构如下
ID NAME
1 A
2 B
表A结构
ID FK_A DES
1 1 EN
2 1 CN
3 2 AU
4 2 JN
表B结构
则执行语句
Select a.id,group_concat(des)G from a,b on a.id=b.fk_a group by a.id
形成的数据如下:
ID G
1 EN,CN
2 AU,JN
以上就是group_concat的常规用法,但我们这里不是讨论group_concat的用法,而是讨论group_concat的逆处理。
即我们有(gt表)
ID G
1 EN,CN
2 AU,JN
这样的表数据,如何形成(ct表)
ID G
1 EN
1 CN
2 AU
2 JN
这样的数据呢?
假设:我们不知道G列中间有几个逗号,即我们不知道第一行最后会形成几条数据,如果有一个逗号,则会形成2条数据,如果有二个逗号,则会形成3条数据。因此我们需要先建立一个表,用于记录每条数据最后形成几条数据。
创建test数据库,数据库中只有一列。
Create table test(ids int(1))
增加数据(这里的数据根据表中有几个逗号来确认)
Insert test(ids)values(1),(2)
执行查询
SELECT ids,SUBSTRING_INDEX(SUBSTRING_INDEX(g,',',SELECT LENGTH(g)-LENGTH(REPLACE(g,',',''))-ids),',',-1) FROM test,gt
这个语句中:substring_index函数用于截取字符串,length(g)-length(replace(g,’,’,’’)用于判断有几个逗号
mysql中将通过逗号分隔的字符串形成一个表的处理方案
最新推荐文章于 2025-06-02 17:04:11 发布