dede文章点击数据存哪表?字段名是click还是count?

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

核心概念

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

dede 文章点击 数据库
(图片来源网络,侵删)

涉及的数据库表

文章点击数主要存储在两个核心表中:

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 代码会执行以下逻辑:

  1. 接收请求: 获取 URL 中的文章 ID ($_GET['id'])。
  2. 检查是否重复点击:
    • 系统会先查询 #@__log 表,检查当前 IP 地址在短时间内(5 分钟内)是否已经记录过对这篇文章 ID 的点击。
    • 如果已经记录过,则不再增加点击数,直接读取 #@__archives 表中的 click 值并显示,以防止用户刷新页面就增加点击数。
    • 如果没有记录过,则进入下一步。
  3. 写入日志记录: 向 #@__log 表中插入一条新的记录,包含文章 ID、当前时间戳、用户 IP 等信息。
  4. 更新点击数: 执行一条 SQL UPDATE 语句,将 #@__archives 表中对应文章 ID 的 click 字段的值加 1。
    • SQL 语句类似: UPDATE dede_archives SET click = click + 1 WHERE id = 123;
  5. 显示文章: 从 #@__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: 点击数不增加怎么办?

  1. 文件权限问题: 确保网站目录(特别是 data 目录)有正确的写入权限。
  2. 缓存问题: DedeCMS 有全站缓存,尝试进入后台的“系统” -> “一键更新缓存” -> “更新所有缓存”,然后清空浏览器缓存再试。
  3. 模板标签问题: 确保文章详情页的模板文件(通常是 article_article.htm)中正确使用了点击数标签,标签通常是 [field:click/]
  4. 数据库错误: 检查数据库连接是否正常,#@__archives 表的 click 字段是否存在。
  5. 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 文章点击数的实现机制,并能从容地进行数据查询、修改和排错。

-- 展开阅读全文 --
头像
thinkphp仿织梦
« 上一篇 02-12
dede如何修改新添加的变量?
下一篇 » 02-12

相关文章

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

目录[+]