php - 复杂 MySQL 查询的问题

标签 php mysql mybb

抱歉,我无法很好地解释这一点。我正在尝试编写一个 MyBB 插件,在几天后锁定一个线程。 threads 表中的重要列是tid、fid、lastpost、lastpostuserid、closed、stickyposts 表有 pid、tid、fid、dateline

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

插件是用 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, 删除时间

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 可以执行非常复杂的查询,这可以避免我执行多个查询和解析结果。

伪代码:

  1. 查找所有具有 fid $fid 且 lastpost 少于 $days 天前且 lastposterid 不是 $userid (机器人发帖的用户)

  2. 对于 fid 中具有 lastposterid 作为 $userid 的线程,获取 tid。查找 posts 中具有该 tid 的所有帖子,uid 不是 $userid,并且最高的 dateline 之前$天前。存储tid

  3. 同时获取具有那些 tid 的线程 - 现在我们拥有所有线程的最后一个响应不是 $days 前来自机器人的。

    <
  4. 更新这些线程的 lock、sticky 或 fid 字段(如果已指定)。

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

这样有道理吗?我知道我不擅长解释这个。

最佳答案

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

查看:here's a tutorial , 和 here's MySQL's documentation .

更新:

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

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

关于php - 复杂 MySQL 查询的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163838/

相关文章:

python - MySQLdb/_mysql.c(29) : fatal error C1083: Cannot open include file: 'mysql.h' : No such file or directory

mysql - 我正在使用 mybb,如何找到当前拥有最多读者的前 5 个线程?

php - 来自 cURL : #3: <url> malformed 的错误

php - 如何在菜单元素之间添加空间(在 wordpress 中)?

php - ldap_bind() : Unable to bind to server: Invalid DN syntax

php - 检测 AdBlocking 软件?

php - 为什么HTTP响应体开头包含 "2fb"?

mysql - 根据另一个表中的记录更新 SQL 记录

mysql - 根据用户上次登录日期按国家/地区选择前 2 位用户

php - 此 SQL 查询 (MyBB-Teamspeak-Sync) 中的错误在哪里?