核心概念
在 DedeCMS 中,文章的点击数(也叫浏览量)是一个动态统计的数据,它的工作原理是:每当有用户访问一篇文章的详情页时,系统会自动将该文章的点击数在数据库中加 1。

(图片来源网络,侵删)
涉及的数据库表
文章点击数主要存储在两个核心表中:
a) #@__archives (文章主表)
这是存储文章所有主要信息的表,包括标题、内容、作者、发布时间等。
- 关键字段:
click - 数据类型:
int(11)或mediumint(8),一个整数。 - 作用: 直接存储文章当前的点击数,这是最终呈现给用户的数字。
b) #@__log (日志记录表)
这个表用来记录用户的访问行为,包括文章点击、软件下载等。
- 关键字段:
typeid,addtime,ip,mid - 作用: 作为点击数的“增量记录”,当用户点击文章时,系统会先向这个表插入一条记录,然后再去
#@__archives表的click字段执行+1操作,这个表主要用于防止重复点击(通过 IP 和时间判断)和记录详细的访问日志。
数据库表结构示例
为了让你更直观地理解,这里给出两个表的核心字段结构:
#@__archives 表结构示例
| 字段名 | 数据类型 | 说明 |
|---|---|---|
id |
int(11) | 文章的唯一 ID (主键) |
typeid |
int(11) | 所属栏目 ID |
click |
int(11) | 文章点击数 (核心字段) |
| ... | ... | 其他文章内容字段... |
#@__log 表结构示例
| 字段名 | 数据类型 | 说明 |
|---|---|---|
id |
int(11) | 日志记录 ID (主键) |
typeid |
int(11) | 的 ID (对于文章,#@__archives 表的 id) |
addtime |
int(11) | 点击发生的时间戳 |
ip |
varchar(15) | 点击用户的 IP 地址 |
mid |
int(11) | 点击用户的会员 ID (0 表示未登录游客) |
| ... | ... | 其他日志字段... |
点击数的工作流程 (PHP 代码逻辑)
当你访问一篇文章时,article.php?id=123,后台 PHP 代码会执行以下逻辑:
- 接收请求: 获取 URL 中的文章 ID (
$_GET['id'])。 - 检查是否重复点击:
- 系统会先查询
#@__log表,检查当前 IP 地址在短时间内(5 分钟内)是否已经记录过对这篇文章 ID 的点击。 - 如果已经记录过,则不再增加点击数,直接读取
#@__archives表中的click值并显示,以防止用户刷新页面就增加点击数。 - 如果没有记录过,则进入下一步。
- 系统会先查询
- 写入日志记录: 向
#@__log表中插入一条新的记录,包含文章 ID、当前时间戳、用户 IP 等信息。 - 更新点击数: 执行一条 SQL
UPDATE语句,将#@__archives表中对应文章 ID 的click字段的值加 1。- SQL 语句类似:
UPDATE dede_archives SET click = click + 1 WHERE id = 123;
- SQL 语句类似:
- 显示文章: 从
#@__archives表中读取文章的所有信息,包括更新后的click值,并渲染到页面上。
常用操作和 SQL 语句
a) 查看某篇文章的点击数
如果你想直接在数据库中查询某篇文章的点击数,可以使用以下 SQL 语句:
SELECT id, title, click FROM dede_archives WHERE id = 123;
将 123 替换为你想查询的文章 ID。
b) 查看点击数最高的 10 篇文章
SELECT id, title, click FROM dede_archives ORDER BY click DESC LIMIT 10;
c) 重置某篇文章的点击数
如果你想将某篇文章的点击数清零或重置为一个特定值,可以直接更新 #@__archives 表。
重置为 0:
UPDATE dede_archives SET click = 0 WHERE id = 123;
重置为 1000:
UPDATE dede_archives SET click = 1000 WHERE id = 123;
d) 清空所有文章的点击数
这是一个非常危险的操作,请务必在备份数据库后执行!
UPDATE dede_archives SET click = 0;
常见问题与解决方案
问题 1: 点击数不增加怎么办?
- 文件权限问题: 确保网站目录(特别是
data目录)有正确的写入权限。 - 缓存问题: DedeCMS 有全站缓存,尝试进入后台的“系统” -> “一键更新缓存” -> “更新所有缓存”,然后清空浏览器缓存再试。
- 模板标签问题: 确保文章详情页的模板文件(通常是
article_article.htm)中正确使用了点击数标签,标签通常是[field:click/]。 - 数据库错误: 检查数据库连接是否正常,
#@__archives表的click字段是否存在。 - JS 被禁用: 点击数的统计通常依赖 JavaScript,如果用户禁用了 JS,可能不会统计(但这通常不是服务器端的问题)。
问题 2: 如何手动批量修改点击数?
如果你需要批量修改,比如给所有文章增加 100 次点击,可以使用 SQL 的 UPDATE 语句结合 JOIN(如果需要关联其他表)。
示例:给所有 '技术分享' 栏目(ID=5)下的文章点击数增加 100。
UPDATE dede_archives AS a JOIN dede_arctype AS t ON a.typeid = t.id SET a.click = a.click + 100 WHERE t.id = 5;
| 功能 | 核心表 | 关键字段 | 实现方式 |
|---|---|---|---|
| 存储点击数 | #@__archives |
click |
直接存储最终数值 |
| 记录点击行为 | #@__log |
typeid, ip, addtime |
记录日志,用于防刷和增量 |
| 增加点击数 | 两个表联动 | SQL UPDATE 语句 |
PHP 逻辑控制,先写日志后更新数值 |
理解了 #@__archives 和 #@__log 这两个表的关系和作用,你就能完全掌握 DedeCMS 文章点击数的实现机制,并能从容地进行数据查询、修改和排错。
