第一部分:基础准备
在执行任何查询之前,你需要确保:

-
获取数据库连接信息:
- 主机名:通常是
localhost。 - 用户名:你的数据库用户名。
- 密码:你的数据库密码。
- 数据库名:你的 DedeCMS 网站所使用的数据库名。
- 主机名:通常是
-
获取表前缀:
- DedeCMS 的数据表默认都有一个前缀,通常是
dede_,这个前缀是在安装时设置的,非常重要,如果你不确定,可以打开/data/config.cache.inc.php文件,里面会明确写出$cfg_dbprefix = '你的表前缀';。
- DedeCMS 的数据表默认都有一个前缀,通常是
-
选择查询工具:
- phpMyAdmin:这是最常用、最方便的工具,几乎所有虚拟主机都提供,通过你的主机控制面板可以进入。
- 命令行:如果你有服务器权限,可以使用
mysql命令行工具。 - 代码查询:如果你想在 PHP 代码中执行查询,可以使用
mysqli或PDO扩展。
第二部分:核心数据表结构
理解 DedeCMS 的核心表结构是高效查询的关键,以下是最常用的几个表:

表名 (假设前缀为 dede_) |
用途说明 |
|---|---|
dede_archives |
文章主表,存储所有文章的核心信息,如 ID、标题、文章内容(body)、发布时间、点击量、作者等。 |
dede_arctype |
栏目表,存储网站所有栏目(分类)的信息,如 ID、栏目名称、栏目目录、父级 ID 等。 |
dede_addonarticle |
文章附加表,当文章模型使用“文章”模型时,文章的详细内容(如 body 字段)不存主表,而是存在这个附加表中,通过 aid 与 archives 表关联。 |
dede_arcmulti |
多图/软件模型附加表,用于“多图”、“软件”等其他内容模型的附加数据。 |
dede_admin |
管理员表,存储管理员账号、密码和权限。 |
dede_member |
会员表,存储网站会员的信息。 |
dede_homepageset |
首页设置表,存储首页调用信息的设置。 |
第三部分:常用查询场景与 SQL 语句
我们将使用 phpMyAdmin 作为主要工具,因为它提供了直观的界面。
场景 1:查询一篇文章的完整信息
假设你要找 ID 为 100 的文章。
分析:和基本信息在 archives 表,但正文内容通常在 addonarticle 表,我们需要关联查询。
步骤:
- 在
phpMyAdmin中,选择你的数据库。 - 点击“SQL”选项卡,进入查询界面。
- 输入以下 SQL 语句:
SELECT
a.id,
a.title,
a.pubdate,
a.click,
d.body
FROM
dede_archives AS a
LEFT JOIN
dede_addonarticle AS d ON a.id = d.aid
WHERE
a.id = 100;
语句解析:
SELECT a.id, a.title, ...:选择archives表(别名为a)中的id,title等字段,以及addonarticle表(别名为d)中的body字段。FROM dede_archives AS a:从archives表查询,并给它一个别名a以方便书写。LEFT JOIN dede_addonarticle AS d ON a.id = d.aid:将archives表和addonarticle表通过id和aid字段左连接起来。LEFT JOIN能确保即使文章没有附加内容(addonarticle中没有对应记录),也能查出文章的基本信息。WHERE a.id = 100:查询条件,只查找 ID 为 100 的文章。
场景 2:查询某个栏目下的所有文章
假设你要找栏目 ID 为 5 的所有文章,并按发布时间倒序排列。
分析:
archives 表中有 typeid 字段,它关联 arctype 表的 ID。
SQL 语句:
SELECT
id,
pubdate,
click
FROM
dede_archives
WHERE
typeid = 5
ORDER BY
pubdate DESC;
语句解析:
ORDER BY pubdate DESC:将结果按pubdate(发布时间)字段降序排列,ASC是升序。LIMIT:如果只想显示前 20 条,可以加上LIMIT 0, 20或LIMIT 20。
场景 3:查询标题包含特定关键词的文章
假设你要查找标题中包含“织梦教程”的所有文章。
SQL 语句:
SELECT
id,
pubdate
FROM
dede_archives
WHERELIKE '%织梦教程%'
ORDER BY
pubdate DESC;
语句解析:
LIKE是 SQL 中的模糊匹配操作符。- 是通配符,代表任意数量的任意字符。
%织梦教程%表示“织梦教程”这个词可以出现在标题的任何位置。
场景 4:查询点击量最高的 10 篇文章
SQL 语句:
SELECT
id,
click
FROM
dede_archives
ORDER BY
click DESC
LIMIT 10;
场景 5:跨表查询 - 获取文章标题及其所属栏目名
这是非常常见的操作,需要同时用到 archives 和 arctype 表。
SQL 语句:
SELECT
a.title AS article_title,
t.typename AS category_name,
a.pubdate
FROM
dede_archives AS a
JOIN
dede_arctype AS t ON a.typeid = t.id
ORDER BY
a.pubdate DESC
LIMIT 20;
语句解析:
JOIN(或INNER JOIN):内连接,只有当两个表中都有匹配的记录时,才会返回结果,这里只有当文章有对应的栏目时,才会显示。a.title AS article_title:给a.title字段起一个别名article_title,让结果更清晰。t.typename AS category_name:同理,给栏目名起别名。ON a.typeid = t.id:指定连接的条件,文章的typeid等于栏目的id。
第四部分:高级查询与修改
警告:执行 UPDATE(更新)和 DELETE(删除)操作具有破坏性,请务必备份数据库或在测试环境中操作!
场景 6:批量修改文章内容
将所有文章内容中的旧域名 old.com 替换为新域名 new.com。
分析:在 dede_addonarticle 表的 body 字段,这是一个 TEXT 类型的字段,可以使用 REPLACE 函数。
SQL 语句:
UPDATE dede_addonarticle SET body = REPLACE(body, 'old.com', 'new.com');
重要提示:
- 先备份数据库!
- 如果不确定影响范围,可以先执行
SELECT语句预览:SELECT id, title, body FROM dede_addonarticle WHERE body LIKE '%old.com%';
场景 7:批量修改文章状态(从“仅动态”改为“生成HTML”)
文章的 ismake 字段控制是否生成静态HTML。0 表示动态,1 表示静态。
SQL 语句:将所有未生成的文章设置为已生成。
UPDATE dede_archives SET ismake = 1 WHERE ismake = 0;
第五部分:在 PHP 代码中查询
如果你想在 DedeCMS 的模板文件(.htm)或其他 PHP 文件中查询数据库,可以使用 DedeCMS 自带的数据库操作类 $db。
示例:在自定义页面中查询并显示最新文章
- 在
/plus/目录下创建一个新文件,my_latest_news.php。 - 在文件中写入以下代码:
<?php
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 查询SQL语句
$sql = "SELECT id, title, pubdate FROM dede_archives ORDER BY pubdate DESC LIMIT 10";
// 执行查询
$dsql->SetQuery($sql);
$dsql->Execute();
// 循环输出结果
echo "<ul>";
while($row = $dsql->GetArray()){
// 格式化日期
$pubdate = MyDate('Y-m-d H:i:s', $row['pubdate']);
// 构建文章链接
$arcUrl = GetFileUrl($row['id'], $row['typeid'], $row['senddate'], $row['title'], $row['ismake']);
echo "<li><a href='{$arcUrl}'>{$row['title']}</a> ({$pubdate})</li>";
}
echo "</ul>";
?>
代码解析:
require_once(.../common.inc.php);:引入 DedeCMS 的核心文件,获取$db(通常为$dsql)对象。$dsql->SetQuery($sql);:设置要执行的 SQL 语句。$dsql->Execute();:执行查询。$dsql->GetArray();:从结果集中获取一行数据,并以数组形式返回,循环直到没有数据。MyDate()和GetFileUrl()是 DedeCMS 的内置函数,用于格式化日期和获取文章的真实链接。
查询 DedeCMS 数据库的核心在于:
- 理清表结构:知道数据存在哪个表,以及表与表之间如何关联(如
archives.id->addonarticle.aid)。 - 熟练使用 SQL:掌握
SELECT,JOIN,WHERE,ORDER BY,LIMIT,UPDATE,DELETE等基本语句。 - 安全第一:修改和删除操作前务必备份数据库。
- 善用工具:
phpMyAdmin是你最好的朋友。
希望这份详细的指南能帮助你顺利地进行 DedeCMS 数据库查询!
