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 去重得到不重复的词语。
主要的思路就是用组合数来获取所有的词语然后去重,再把所有词语返回。