MySQL一列分多列 (用特殊符号分列,符号出现不限次数)

首先创建表

CREATE TABLE `testtag` (
  `postid` int(11) NOT NULL AUTO_INCREMENT,
  `likes` int(100) DEFAULT NULL,
  `replay` int(100) DEFAULT NULL,
  `share` int(100) DEFAULT NULL,
  `tagid` varchar(220) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`postid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='社区发帖表'



插入数据

insert into testtag values(postid,10,3,5,'2=养生,3=职场');
insert into testtag values(postid,3,5,2,'1=爱情,3=职场,4=玄幻');
insert into testtag values(postid,28,17,5,'4=玄幻,5=搞笑');



结果
MySQL一列分多列 (用特殊符号分列,符号出现不限次数)_第1张图片




参考大佬博文《mysql如何进行以,分割的字符串的拆分》
利用MySQL的内置表help_topic作为辅助表,我的是MySQL8的版本,help_topic_id最大值为684MySQL一列分多列 (用特殊符号分列,符号出现不限次数)_第2张图片
数据量不多,满足需求。

首先将数据根据“,”进行划分


SELECT distinct(substring_index(
	substring_index(t.tag,',', b.help_topic_id + 1), ',', -1)) tagtemp
FROM test.testtag t 
join mysql.help_topic b 
ON b.help_topic_id <  (
	LENGTH(t.tag) - LENGTH(REPLACE(t.tag, ',', '')) + 1) 
order by tagtemp

得到结果
MySQL一列分多列 (用特殊符号分列,符号出现不限次数)_第3张图片
要求根据标签计算各个喜欢,点赞数据量


将标签提取出来并加入聚合函数计算总量

select substring_index(temp.tagtemp, '=', 1) tagid,substring_index(temp.tagtemp, '=', -1) tagcontent,count(postid),sum(temp.likes),sum(temp.replay),sum(temp.share)
 FROM 
	(
		SELECT t.postid,t.likes,t.replay,t.share,
		substring_index(substring_index(t.tag,',', b.help_topic_id + 1), ',', -1) tagtemp 
		FROM test.testtag t 
		join mysql.help_topic b ON b.help_topic_id <  (LENGTH(t.tag) - LENGTH(REPLACE(t.tag, ',', '')) + 1) 
	) temp
 group by tagid order by tagid 

得到结果如下:
MySQL一列分多列 (用特殊符号分列,符号出现不限次数)_第4张图片

你可能感兴趣的:(数据库,mysql)