繁体   English   中英

复杂的MySQL查询有问题

[英]Trouble with complex MySQL query

对不起,我无法很好地解释这一点。 我正在尝试编写MyBB插件,以在几天后锁定线程。 threads表中的重要列是tid, fid, lastpost, lastpostuserid, closed, sticky posts表具有pid, tid, fid, dateline

我有一个需要运行的论坛列表( fid )。 它需要更新在一定天数内没有响应的那些论坛中的所有线程,而忽略该机器人发布的特定用户ID的发布。 它需要更新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少于$ lastpost天前且lastposterid不是$ userid的lastposterid (机器人发布的用户)

  2. 对于fid中具有lastposterid作为$ userid的线程,请获取tid 查找所有帖子poststiduid是不是$用户ID,最高dateline是前$天前。 储存tid

  3. 同时获得带有这些tid的线程-现在,我们拥有的所有线程的响应最后不是$ day以前从bot那里获得的。

  4. 如果指定了这些线程,请更新这些线程的lock,sticky或fid字段。

  5. 如果设置了回复,则针对该主题创建一个新帖子。

这样有道理吗? 我知道我很乐意解释这一点。

过去,我通过使用mysql'events'在特定时间间隔自动执行任务来完成与mysql类似的任务-例如cron for SQL。

看看: 这是一个教程这是MySQL的文档

更新:

我仍然不确定我是否完全理解您的问题,因为措辞有点令人困惑(您描述了一个名为threads的表,但随后提到了“对于fid中的线程”),但是我认为您想要实现的目标可以通过(有些复杂)UPDATE完成。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM