dede sql如何精准查询文章内容中的关键词?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

核心思路

DedeCMS 的文章内容主要存储在 dede_archives (文章主表) 和 dede_addonarticle (文章附加表,根据模型不同可能为 dede_addonother 等) 这两张表中。

dede sql文章内容关键词查询
(图片来源网络,侵删)
  • dede_archives: 存储文章的基本信息,如标题 (title)、作者 (author)、发布时间 (pubdate) 等。
  • dede_addonarticle: 存储文章的正文内容 (body)。

要查询文章内容中的关键词,我们需要对 dede_addonarticle 表的 body 字段进行操作。


使用 LIKE 进行模糊查询 (最常用)

这是最基础、最直接的查询方法,可以找出所有包含指定关键词的文章。

查询包含单个关键词的文章

假设我们要查询所有文章内容中包含 "织梦" 这个关键词的文章,并显示标题和内容摘要。

SELECT
    a.id,
    a.title,
    a.pubdate,
    LEFT(b.body, 200) AS body_summary
FROM
    dede_archives AS a
JOIN
    dede_addonarticle AS b ON a.id = b.aid
WHERE
    b.body LIKE '%织梦%'
ORDER BY
    a.pubdate DESC;

SQL 语句详解:

dede sql文章内容关键词查询
(图片来源网络,侵删)
  • SELECT a.id, a.title, ...: 选择我们需要的字段,a.id 是文章ID,a.title 是文章标题。
  • LEFT(b.body, 200) AS body_summary: 从文章正文中截取前 200 个字符作为摘要,方便预览。
  • FROM dede_archives AS a JOIN dede_addonarticle AS b ON a.id = b.aid: 将文章主表和附加表通过文章ID (id/aid) 关联起来。
  • WHERE b.body LIKE '%织梦%': 这是核心条件
    • LIKE 用于模糊匹配。
    • 是通配符,代表任意数量的任意字符(包括零个)。
    • %织梦% 表示“文本中任意位置包含 '织梦' 这两个连续字符”。
  • ORDER BY a.pubdate DESC: 按发布时间降序排列,最新的文章排在前面。

查询包含多个关键词(AND/OR关系)的文章

  • 查询同时包含 "PHP" 和 "MySQL" 的文章 (AND 关系)

    SELECT
        a.id,
        a.title
    FROM
        dede_archives AS a
    JOIN
        dede_addonarticle AS b ON a.id = b.aid
    WHERE
        b.body LIKE '%PHP%' AND b.body LIKE '%MySQL%'
    ORDER BY
        a.id DESC;
  • 查询包含 "Java" 或 "Python" 的文章 (OR 关系)

    SELECT
        a.id,
        a.title
    FROM
        dede_archives AS a
    JOIN
        dede_addonarticle AS b ON a.id = b.aid
    WHERE
        b.body LIKE '%Java%' OR b.body LIKE '%Python%'
    ORDER BY
        a.id DESC;

使用 REGEXP 进行正则表达式查询 (更强大)

如果你的查询需求更复杂,比如要匹配特定格式的关键词,正则表达式是更好的选择。

查询包含 "DedeCMS" 或 "织梦CMS" 的文章

SELECT
    a.id,
    a.title
FROM
    dede_archives AS a
JOIN
    dede_addonarticle AS b ON a.id = b.aid
WHERE
    b.body REGEXP 'DedeCMS|织梦CMS'
ORDER BY
    a.id DESC;

SQL 语句详解:

dede sql文章内容关键词查询
(图片来源网络,侵删)
  • REGEXP 'DedeCMS|织梦CMS': 使用正则表达式进行匹配。
    • 是正则表达式中的 "OR" 操作符。
    • 这句代码的含义是:查找内容中包含 "DedeCMS" 或者 "织梦CMS" 的记录。

查找特定格式的邮箱地址

查找文章中是否包含 @dedecms.com 结尾的邮箱。

SELECT
    a.id,
    a.title
FROM
    dede_archives AS a
JOIN
    dede_addonarticle AS b ON a.id = b.aid
WHERE
    b.body REGEXP '[a-zA-Z0-9._%+-]+@dedecms\.com'
ORDER BY
    a.id DESC;

结合 CONCAT 搜索标题和内容

我们需要同时搜索文章标题和内容,这样可以找到更相关的结果。

SELECT
    a.id,
    a.title,
    LEFT(b.body, 200) AS body_summary
FROM
    dede_archives AS a
JOIN
    dede_addonarticle AS b ON a.id = b.aid
WHERE
    CONCAT(a.title, ' ', b.body) LIKE '%织梦模板%'
ORDER BY
    a.pubdate DESC;

SQL 语句详解:

  • CONCAT(a.title, ' ', b.body): 将文章的 titlebody 字段连接成一个大的字符串,中间用空格隔开,避免词语粘连。
  • LIKE '%织梦模板%': 现在是在这个连接后的完整字符串中进行搜索,只要标题或内容中任意一部分包含 "织梦模板" 就会被匹配到。

重要注意事项

  1. 表前缀 dede_: 你的数据库表前缀可能不是 dede_,而是在安装时自定义的(如 cms_),请务必将 SQL 语句中的 dede_ 替换为你自己的表前缀。

  2. 文章模型与附加表:

    • 默认的文章模型使用 dede_addonarticle
    • 如果你使用了其他自定义模型(例如图集模型、产品模型等),附加表的名称会不同,可能是 dede_addonother 或其他,你需要根据实际情况修改 JOIN 的表名。
  3. 性能问题:

    • LIKE '%关键词%' 是全表扫描,当文章数量非常多时(比如超过10万篇),查询速度会非常慢,甚至可能导致服务器卡顿。
    • 解决方案: 对于生产环境和频繁的查询,强烈建议使用 MySQL 全文索引,但这需要修改表结构,对现有数据有一定影响,适合在网站初期或数据量不大时进行规划。
  4. 执行环境:

    • 你可以在 DedeCMS 后台的 系统 -> SQL命令行工具 中执行这些 SQL 语句。
    • 也可以使用 phpMyAdmin 等数据库管理工具直接在数据库中执行。
查询需求 SQL 关键部分 适用场景
包含单个关键词 WHERE body LIKE '%关键词%' 最常见、最简单的需求。
包含多个关键词 (AND) WHERE body LIKE '%A%' AND body LIKE '%B%' 需要同时满足多个条件。
包含多个关键词 (OR) WHERE body LIKE '%A%' OR body LIKE '%B%' 满足其中任意一个条件即可。
复杂模式匹配 WHERE body REGEXP '正则表达式' 需要匹配特定格式,如邮箱、手机号。
和内容 WHERE CONCAT(title, ' ', body) LIKE '%关键词%' 扩大搜索范围,提高查全率。

选择哪种方法取决于你的具体需求,对于日常使用,方法一(LIKE 已经足够强大和灵活。

-- 展开阅读全文 --
头像
C语言程序设计_现代方法适合谁学?
« 上一篇 2025-12-14
如何精简织梦后台文件夹?
下一篇 » 2025-12-14

相关文章

取消
微信二维码
支付宝二维码

目录[+]