麻烦复杂的MySQL查询

时间:2013-01-04 19:44:39

标签: php mysql mybb

对不起,我无法解释这一点。我正在尝试编写一个MyBB插件,用于在数天后锁定一个线程。 threads表中的重要列是tid, fid, lastpost, lastpostuserid, closed, stickyposts表格有pid, tid, fid, dateline

我有一个需要运行的论坛列表(fid)。它需要更新那些在一定时间内没有响应的论坛中的所有线程,忽略机器人发布的特定用户标识的帖子。它需要更新lockstickyfid(用于移动主题),或发布回复。

该插件是PHP的,所以如果我需要处理任何结果,我可以在那里完成。

我的麻烦是我对基本SELECT或UPDATE命令之后的SQL查询不是很熟悉,我不确定需要将哪些查询分解为。

更新 好的,这篇文章不太清楚。

我有的表:

threadstid, fid, subject, prefix, icon, poll, uid, username, dateline, firstpost, lastpost, lastposter, lastposteruid, views, replies, closed, sticky, numratings, totalratings, notes, visible, unapprovedposts, attachmentcount, deletetime

postspid, tid, replyto, fid, subject, icon, uid, username, dateline, message, ipaddress, longipaddress, includesig, smilieoff, edituid, edittime, visible, posthash

我需要什么:

我需要锁定(将锁定字段更新为1),粘贴(将粘性字段更新为1),或移动(将fid更改为指定值)或回复(使用正确的tid创建新帖子)那个带有指定fid(论坛ID)的线程。

我遇到的麻烦是我不知道如何分解它。我知道SQL可以做很复杂的查询,避免我做多个查询并解析结果。

伪代码:

  1. 使用fid $ fid查找所有线程lastpost少于几天前,而lastposterid不是$ userid(机器人发布的用户)

  2. 对于fidlastposterid为$ userid的帖子,请获取tid。使用posts查找tid中的所有帖子,uid不是$ userid,最高dateline在$ days前。存储tid

  3. 获取那些tid的线程 - 现在我们拥有所有线程,其中最后一个响应是在几天前没有来自机器人的。

  4. 更新这些线程的锁定,粘性或fid字段(如果已指定)。

  5. 如果设置了回复,则创建一个新帖子以响应该线程。

  6. 这样有意义吗?我知道我很难解释这一点。

1 个答案:

答案 0 :(得分:0)

我使用mysql'events'在过去使用mysql完成了类似的任务,以自动执行特定时间间隔的任务 - 就像SQL的cron一样。

请查看:here's a tutorialhere's MySQL's documentation

<强>更新

我仍然不确定我是否完全理解你的问题,因为措辞有点令人困惑(你描述了一个名为threads的表,但后来提到“对于fid中的线程”),但我想你在尝试什么完成可以通过(有点复杂)UPDATE来完成。

这个问题应该可以转移到dba.stackexchange.com ......但你要求的似乎是子查询的更新。被标记为移至dba。