我不确定纯 SQL (MySQL) 是否可行,但无论如何我都会问。我有一张这样的桌子:
ID TAGS
-----------------------------
1 word1,word2,word3
2 word2,word4
3 word3,word5,word6,word7
...
我想从标签字段中选择一个所有唯一的单词,得到这样的结果:
TAGS
-----
word1
word2
word3
word4
word5
word6
word7
您可以在 SQL 中执行此操作,尽管它并不美观。
select distinct reverse(substring_index(reverse(substring_index(tags, ',', n.n)), ',', 1)) as word
from t cross join
(select 1 as n union all select 2 as n union all select 3 as n union all select 4 as n) n
having word is not null
您需要确保子查询n
至少包含每个标签中的单词数。
这是演示这一点的 SQLFiddle。
这是将原始数据与序列号交叉连接。然后它从标签字符串中挑选出第 n 个值,使用substring_index()
.
要获得最大数量的标签,您可以执行以下操作:
select max(length(tags) - length(replace(tags, ',', 1))+1
from t
我能想到在数据库中这样做的唯一方法是使用存储过程,这个存储过程将遍历每一行,提取并分析其内容,尽管它不会很有效。