急,求解 .. 表中有一个关键词字段,现有1000条数据,关键词中不重复的词语。

1.mysql数据库中有一张表,现有1000条数据。表中有一个关键词字段,每个关键词都是由多个词组成的数组。用“|”或“,”或用空格分开的。现在要求得到所有关键词中不重复的词语。

例:关键词:01. 辽宁|上海|中国|国际,亚洲,欧洲
02. 辽宁,中国,天津,山东

结果:辽宁 上海 中国 国际 亚洲 欧洲 天津 山东

数据:数据库名字:qwer
表名:qaz
数据条数:1000
关键词字段:gjczd

要求:写出得到不重复词语的具体流程(包含链接数据库,sql语句,具体函数,并介绍其思路)

代码行数不超过30行。

急..求解 ..

在 MySQL 中,可以使用以下 SQL 语句来实现查询关键词字段中不重复词语的目的:

SELECT DISTINCT
    SUBSTRING_INDEX(
        SUBSTRING_INDEX(gjczd, '|', n.n),
        '|',
        -1
    ) AS keyword
FROM
    qwer.qaz
    CROSS JOIN (
        SELECT
            a.N + b.N * 10 + 1 n
        FROM
            (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
            ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
        ORDER BY n
    ) n
WHERE
    n.n <= LENGTH(REPLACE(gjczd, '|', '')) + 1

其中:

  • qwer是数据库名,qaz是表名

  • gjczd是关键词字段。

  • 使用CROSS JOIN来组合1~n的数量

  • SUBSTRING_INDEX 函数可以从字符串中提取字符。在这里首先从gjczd中取出每一个词语,然后通过 DISTINCT 去重得到不重复的词语。

主要的思路就是用组合数来获取所有的词语然后去重,再把所有词语返回。