gpt4 book ai didi

mySQL >> 在逗号分隔的字段中查找最常用的词

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:17 25 4
gpt4 key购买 nike

我的每条记录都有一个名为“RES_Tags”的关键字字段。该表是“资源”。

“RES_Tags”字段包含该记录的以逗号分隔的关键字列表。

例如:

labor, work, unions, organized labor, strike, picket, boycott

我可以使用什么 SQL 查询来找出 30 个最常用的标签?

我看到了这个相关主题 Count popular tags with comma delimited field on MySQL ,但我希望自从最初提出这个问题以来,有人已经找到了方法。

或者,这个问题不是重复的原因是,如果无法使用 SQL 查询来执行我要问的事情并且唯一的方法是规范化,那么转换现有的最佳方法是什么逗号分隔列表到标签表和标签到资源表?

最佳答案

您实际上可以从 MySQL 中以逗号分隔的术语列表中提取单个“术语”。这非常令人讨厌,而且它需要知道将出现在任何行中的术语的最大数量。 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... 查询的一部分。不要回头看。

关于mySQL >> 在逗号分隔的字段中查找最常用的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47144201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com