MySQL 根据 字段包含关键词进行分类

为了解决动态关键词匹配的需求,我们需要创建一个关键词表(keywords_table),其中存储关键词和对应的类别。以下是具体的步骤:


1. 创建关键词表

可以用以下 SQL 创建一个简单的关键词表:

sql 复制代码
CREATE TABLE keywords_table (
    id INT AUTO_INCREMENT PRIMARY KEY, -- 主键
    category VARCHAR(50) NOT NULL,     -- 类别名称
    keyword VARCHAR(255) NOT NULL      -- 关键词
);

2. 插入关键词数据

根据需求插入对应的关键词和类别:

sql 复制代码
INSERT INTO keywords_table (category, keyword)
VALUES 
    ('类别 A', '关键词1'),
    ('类别 A', '关键词2'),
    ('类别 B', '关键词3'),
    ('类别 B', '关键词4');

3. 示例主表

假设主表为 your_table

sql 复制代码
CREATE TABLE your_table (
    id INT AUTO_INCREMENT PRIMARY KEY, -- 主键
    info VARCHAR(255) NOT NULL         -- 包含描述的字段
);

插入示例数据:

sql 复制代码
INSERT INTO your_table (info)
VALUES
    ('关键词1,关键词4'),
    ('关键词2'),
    ('关键词3'),
    ('无匹配关键词');

4. 用 JOIN 查询匹配关键词类别

sql 复制代码
SELECT 
    t.id,
    t.info,
    GROUP_CONCAT(DISTINCT k.category) AS 匹配类别 -- 聚合匹配的类别,避免重复
FROM your_table t
LEFT JOIN keywords_table k 
    ON t.info LIKE CONCAT('%', k.keyword, '%') -- 动态匹配关键词
GROUP BY t.id, t.info;

查询结果示例

基于上述数据,查询结果可能如下:

id info 匹配类别
1 关键词1,关键词4 类别 A, 类别 B
2 关键词2 类别 A
3 关键词3 类别 B
4 无匹配关键词 NULL

关键点说明

  1. 关键词动态匹配ON t.info LIKE CONCAT('%', k.keyword, '%') 用于动态检测 info 是否包含某个关键词。
  2. 去重类别GROUP_CONCAT(DISTINCT k.category) 保证返回的类别不重复。
  3. 未匹配处理LEFT JOIN 保证即使没有匹配到关键词,your_table 的数据仍会显示,匹配结果为 NULL

优化建议

  • 如果 info 数据非常大,建议在逻辑层(如代码中)拆分匹配,而不是完全依赖 SQL。
  • 可以为 keywords_table.keyword 创建索引以优化性能,特别是关键词较多时:
sql 复制代码
CREATE INDEX idx_keyword ON keywords_table (keyword);
相关推荐
马克Markorg5 小时前
常见的向量数据库和具有向量数据库能力的数据库
数据库
李慕婉学姐6 小时前
【开题答辩过程】以《基于社交网络用户兴趣大数据分析》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
数据挖掘·数据分析
Coder_Boy_8 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy8 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
数据知道10 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_124987075310 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha10 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_10 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Gain_chance10 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
此生只爱蛋10 小时前
【Redis】主从复制
数据库·redis