对不起,我不能很好地解释这一点。我正在尝试编写一个 MyBB 插件,该插件会在几天后锁定一个线程。表中的重要列threads
是tid, fid, lastpost, lastpostuserid, closed, sticky
。posts
桌子pid, tid, fid, dateline
有。
fid
我有一个需要运行的论坛列表 ( )。它需要更新那些论坛中在一定天数内没有响应的所有线程,忽略来自机器人发布的特定用户 ID 的帖子。它需要更新lock
, sticky
, fid
(用于移动线程),或发布回复。
该插件在 PHP 中,所以如果我需要处理任何结果,我可以在那里完成。
我的问题是我对基本 SELECT 或 UPDATE 命令的 SQL 查询不是很熟悉,而且我不确定需要将其分解为哪些查询。
更新: 好的,这篇文章不是很清楚。
我有的表:
threads
:tid, fid, subject, prefix, icon, poll, uid, username, dateline, firstpost, lastpost, lastposter, lastposteruid, views, replies, closed, sticky, numratings, totalratings, notes, visible, unapprovedposts, attachmentcount, deletetime
posts
:pid, tid, replyto, fid, subject, icon, uid, username, dateline, message, ipaddress, longipaddress, includesig, smilieoff, edituid, edittime, visible, posthash
我需要的:
我需要锁定(将锁定字段更新为 1)、粘滞(将粘滞字段更新为 1)或移动(将 fid 更改为指定值)或回复(创建具有正确 tid 的新帖子等)具有指定 fid(论坛 id)的线程。
我遇到的麻烦是我不知道如何分解它。我知道 SQL 可以执行非常复杂的查询,从而避免我执行多个查询并解析结果。
伪代码:
查找所有具有
fid
$fid 且lastpost
少于 $days 天前且lastposterid
不是 $userid 的线程(机器人发布的用户)对于
fid
具有lastposterid
$userid 的线程,获取tid
. 查找所有在posts
that 中tid
,uid
不是 $userid 的帖子,最高dateline
的是 $days 之前的帖子。存储tid
.获取带有这些
tid
s 的线程 - 现在我们拥有所有线程的最后一个响应不是来自 bot 超过 $days 前的响应。如果指定了这些线程,则更新这些线程的 lock、sticky 或 fid 字段。
如果设置了回复,则创建一个新帖子以响应该线程。
这样有意义吗?我知道我不擅长解释这一点。