我有一个表格,我存储了我的博客文章, 结构是这样的:
id,title,description,tags..
在标签列中,数据的存储方式如下:tag1,tag2,tag3,tag4.
我想从我的所有文章中选择所有不同的标签
ex:
article 1 :tags1,tags2,tags3,tags,4
article 2 : tags 1,tags4,tag5,tags 6
After query :
tags1,tag2,tags3,tags4,tags5,tags6
我该怎么做?
答案 0 :(得分:0)
这个丑陋的查询在一篇文章中最多可以使用8个标签,但如果需要,可以添加更多的SELECT UNION。
由于你没有提供表名,我猜到了“文章”。
SELECT
DISTINCT(Tags)
FROM
(SELECT TRIM(SUBSTRING_INDEX(Article.Tags, ',', 1)) AS Tags FROM Article UNION
SELECT TRIM(SUBSTRING(SUBSTRING_INDEX(Article.Tags, ',', 2), LENGTH(SUBSTRING_INDEX(Article.Tags, ',', 1))+2)) FROM Article UNION
SELECT TRIM(SUBSTRING(SUBSTRING_INDEX(Article.Tags, ',', 3), LENGTH(SUBSTRING_INDEX(Article.Tags, ',', 2))+2)) FROM Article UNION
SELECT TRIM(SUBSTRING(SUBSTRING_INDEX(Article.Tags, ',', 4), LENGTH(SUBSTRING_INDEX(Article.Tags, ',', 3))+2)) FROM Article UNION
SELECT TRIM(SUBSTRING(SUBSTRING_INDEX(Article.Tags, ',', 5), LENGTH(SUBSTRING_INDEX(Article.Tags, ',', 4))+2)) FROM Article UNION
SELECT TRIM(SUBSTRING(SUBSTRING_INDEX(Article.Tags, ',', 6), LENGTH(SUBSTRING_INDEX(Article.Tags, ',', 5))+2)) FROM Article UNION
SELECT TRIM(SUBSTRING(SUBSTRING_INDEX(Article.Tags, ',', 7), LENGTH(SUBSTRING_INDEX(Article.Tags, ',', 6))+2)) FROM Article UNION
SELECT TRIM(SUBSTRING(SUBSTRING_INDEX(Article.Tags, ',', 8), LENGTH(SUBSTRING_INDEX(Article.Tags, ',', 7))+2)) FROM Article
-- This query will work for a max number of 8 tags in one article : add more SELECT UNION if needed
)
AS AllTags
作为旁注,我完全同意GolezTrol,你真的应该考虑将你的标签存储在一个单独的表中。
答案 1 :(得分:-1)
你应该有一个标签表,以及一个关联表,你可以在其中存储标签和文章之间的关联。