对不起,我无法解释这一点。我正在尝试编写一个MyBB插件,用于在数天后锁定一个线程。 threads
表中的重要列是tid, fid, lastpost, lastpostuserid, closed, sticky
。 posts
表格有pid, tid, fid, dateline
。
我有一个需要运行的论坛列表(fid
)。它需要更新那些在一定时间内没有响应的论坛中的所有线程,忽略机器人发布的特定用户标识的帖子。它需要更新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
少于几天前,而lastposterid
不是$ userid(机器人发布的用户)
对于fid
中lastposterid
为$ userid的帖子,请获取tid
。使用posts
查找tid
中的所有帖子,uid
不是$ userid,最高dateline
在$ days前。存储tid
。
获取那些tid
的线程 - 现在我们拥有所有线程,其中最后一个响应是在几天前没有来自机器人的。
更新这些线程的锁定,粘性或fid字段(如果已指定)。
如果设置了回复,则创建一个新帖子以响应该线程。
这样有意义吗?我知道我很难解释这一点。
答案 0 :(得分:0)
我使用mysql'events'在过去使用mysql完成了类似的任务,以自动执行特定时间间隔的任务 - 就像SQL的cron一样。
请查看:here's a tutorial和here's MySQL's documentation。
<强>更新强>
我仍然不确定我是否完全理解你的问题,因为措辞有点令人困惑(你描述了一个名为threads的表,但后来提到“对于fid中的线程”),但我想你在尝试什么完成可以通过(有点复杂)UPDATE来完成。
这个问题应该可以转移到dba.stackexchange.com ......但你要求的似乎是子查询的更新。被标记为移至dba。