要求
知道将出现在任何行中的最大项数。这个
SUBSTRING_INDEX()
假设你在一个领域的学期数从来没有超过五个。然后这个查询会得到您的所有条件。
SELECT term FROM(
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(RES_Tags,','), ',',1), ',', -1)) term FROM Resources
UNION ALL
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(RES_Tags,','), ',',2), ',', -1)) term FROM Resources
UNION ALL
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(RES_Tags,','), ',',3), ',', -1)) term FROM Resources
UNION ALL
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(RES_Tags,','), ',',4), ',', -1)) term FROM Resources
UNION ALL
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(RES_Tags,','), ',',5), ',', -1)) term FROM Resources
UNION ALL
SELECT TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(CONCAT(RES_Tags,','), ',',6), ',', -1)) term FROM Resources
) terms
WHERE LENGTH(term) > 0
如果你的最大期限数超过五个,你可以在联盟中加入更多期限。
编辑
你应该正常化吗?是的,你应该正常化。您可以使用这种查询来创建表的规范化版本吗。对这里有一些提示。
找出你现在拥有的最长记录中有多少个标签。添加两个。编写此类查询以支持该数字。将其用作
CREATE TABLE tags AS SELECT...
查询不要回头看。