1

对不起,我不能很好地解释这一点。我正在尝试编写一个 MyBB 插件,该插件会在几天后锁定一个线程。表中的重要列threadstid, fid, lastpost, lastpostuserid, closed, stickyposts桌子pid, tid, fid, dateline有。

fid我有一个需要运行的论坛列表 ( )。它需要更新那些论坛中在一定天数内没有响应的所有线程,忽略来自机器人发布的特定用户 ID 的帖子。它需要更新lock, sticky, fid(用于移动线程),或发布回复。

该插件在 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少于 $days 天前且lastposterid不是 $userid 的线程(机器人发布的用户)

  2. 对于fid具有lastposterid$userid 的线程,获取tid. 查找所有在poststhat 中tiduid不是 $userid 的帖子,最高dateline的是 $days 之前的帖子。存储tid.

  3. 获取带有这些tids 的线程 - 现在我们拥有所有线程的最后一个响应不是来自 bot 超过 $days 前的响应。

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

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

这样有意义吗?我知道我不擅长解释这一点。

4

1 回答 1

0

我过去使用 mysql 完成了类似的任务,方法是使用 mysql 的“事件”以特定的时间间隔自动执行任务——比如 SQL 的 cron。

看看:这里是教程这里是 MySQL 的文档

更新:

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

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

于 2013-01-04T20:36:13.267 回答