dede数据库查询有哪些常用方法?

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

第一部分:基础准备

在执行任何查询之前,你需要确保:

dede 数据库 查询
(图片来源网络,侵删)
  1. 获取数据库连接信息

    • 主机名:通常是 localhost
    • 用户名:你的数据库用户名。
    • 密码:你的数据库密码。
    • 数据库名:你的 DedeCMS 网站所使用的数据库名。
  2. 获取表前缀

    • DedeCMS 的数据表默认都有一个前缀,通常是 dede_,这个前缀是在安装时设置的,非常重要,如果你不确定,可以打开 /data/config.cache.inc.php 文件,里面会明确写出 $cfg_dbprefix = '你的表前缀';
  3. 选择查询工具

    • phpMyAdmin:这是最常用、最方便的工具,几乎所有虚拟主机都提供,通过你的主机控制面板可以进入。
    • 命令行:如果你有服务器权限,可以使用 mysql 命令行工具。
    • 代码查询:如果你想在 PHP 代码中执行查询,可以使用 mysqliPDO 扩展。

第二部分:核心数据表结构

理解 DedeCMS 的核心表结构是高效查询的关键,以下是最常用的几个表:

dede 数据库 查询
(图片来源网络,侵删)
表名 (假设前缀为 dede_) 用途说明
dede_archives 文章主表,存储所有文章的核心信息,如 ID、标题、文章内容(body)、发布时间、点击量、作者等。
dede_arctype 栏目表,存储网站所有栏目(分类)的信息,如 ID、栏目名称、栏目目录、父级 ID 等。
dede_addonarticle 文章附加表,当文章模型使用“文章”模型时,文章的详细内容(如 body 字段)不存主表,而是存在这个附加表中,通过 aidarchives 表关联。
dede_arcmulti 多图/软件模型附加表,用于“多图”、“软件”等其他内容模型的附加数据。
dede_admin 管理员表,存储管理员账号、密码和权限。
dede_member 会员表,存储网站会员的信息。
dede_homepageset 首页设置表,存储首页调用信息的设置。

第三部分:常用查询场景与 SQL 语句

我们将使用 phpMyAdmin 作为主要工具,因为它提供了直观的界面。

场景 1:查询一篇文章的完整信息

假设你要找 ID 为 100 的文章。

分析:和基本信息在 archives 表,但正文内容通常在 addonarticle 表,我们需要关联查询。

步骤

  1. phpMyAdmin 中,选择你的数据库。
  2. 点击“SQL”选项卡,进入查询界面。
  3. 输入以下 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 表通过 idaid 字段左连接起来。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, 20LIMIT 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:跨表查询 - 获取文章标题及其所属栏目名

这是非常常见的操作,需要同时用到 archivesarctype 表。

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

示例:在自定义页面中查询并显示最新文章

  1. /plus/ 目录下创建一个新文件,my_latest_news.php
  2. 在文件中写入以下代码:
<?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 数据库的核心在于:

  1. 理清表结构:知道数据存在哪个表,以及表与表之间如何关联(如 archives.id -> addonarticle.aid)。
  2. 熟练使用 SQL:掌握 SELECT, JOIN, WHERE, ORDER BY, LIMIT, UPDATE, DELETE 等基本语句。
  3. 安全第一:修改和删除操作前务必备份数据库。
  4. 善用工具phpMyAdmin 是你最好的朋友。

希望这份详细的指南能帮助你顺利地进行 DedeCMS 数据库查询!

-- 展开阅读全文 --
头像
Linux命令如何用C语言实现?
« 上一篇 今天
dede单页面怎么分页
下一篇 » 今天

相关文章

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

目录[+]