在单个MySQL列中分隔标签

时间:2015-01-27 01:02:10

标签: mysql sql

我正在使用堆栈溢出的数据转储,并且在帖子中,有一个列(type:String)用于标记,它采用以下形式:

"<apache><tomcat><java><httpd><virtualhost>"

如何将SQL拆分为单独的行?

所以我有一个这样的结果表:

ID    |          Tag
--------------------
1     |       apache
2     |       tomcat
3     |         java
4     |        httpd
5     |  virtualhost

2 个答案:

答案 0 :(得分:2)

你可以用这样的逻辑打破这一点:

select replace(replace(substring(substring_index(col, '><', n), '><', -1), '<', ''), '>', '')
from (select 1 as n union all select 2 union all select 3 select 4 union all select 5
     ) n join
     table t
     on length(col) - replace(length(replace(col, '>' '') <= n.n

select中的逻辑基本上是从列表中提取第n个项目。它还会从值中删除<>

连接中的逻辑是获取第n个元素的数字。

答案 1 :(得分:0)

您的转储是否包含Stack Overflow标记的完整列表?如果是这样,那么我会把它们放在一个单独的表中并执行以下操作:

SET @row_number:=0;
SELECT @row_number:=@row_number+1 AS ID, t1.Tag
  FROM tag_table t1 INNER JOIN post_table p1
 WHERE p1.tags LIKE CONCAT('%<', t1.tag, '>%')
   AND p1.PostID = <whatever the post ID is>;