转载请注明转载自:忆雨林枫

拆分MySQL逗号分隔字段同时列转行

CREATE TABLE yanyan(
id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键(自增)’,
unames varchar(500) DEFAULT NULL COMMENT ‘统称’,
PRIMARY KEY (id)
) ;

然后插入一些记录,最后的结果如下:

select a.ID,substring_index(substring_index(a.unames,’,’,b.help_topic_id+1),’,’,-1)
from yanyan a
join mysql.help_topic b
on b.help_topic_id < (length(a.unames) – length(replace(a.unames,’,’,”))+1)
order by a.ID;

最后显示结果:

局限性就在在于,需要一个拥有连续数列的独立表。并且连续数列的最大值一定要大于符合分割的值的个数,也就是unames字段中分隔的个数。

这里就可以,借助mysql内部也有现成的连续数列表可用。如mysql.help_topic: help_topic_id 共有637个数值,一般能满足于大部分需求,我的实验记录中最长有60个,足够了。