我无法形成执行以下操作的MySQL查询:
根据threadID等于每个线程的threadID的最新post(最大时间戳)的时间戳(降序)从threads表中选择所有threadID。所以基本上我想遍历线程,让MySQL检查数据库中的线程0。然后检查threadID为0的所有帖子,并根据thread0中帖子的最大时间戳对thread0进行排序。然后对thread1、thread2等重复此操作,并对它们进行相应的排序。
这可能吗?它将创建论坛的“bump system”效果,其中最近激活的线程将连续地被bump到列表的顶部,直到线程消失,然后它将下降到底部。我曾经使用不同的实现,在threads表中存储一个lastActivity时间戳,并在新的post提交到线程中时更新它,但是这个查询会使事情更加高效。
谢谢!这里有两个相关的表:线程和帖子。posts有一个thread ID字段,用于存储它所属线程的ID,还有一个timestamp字段。Threads有一个与post的threadID相对应的字段threadID。
最佳答案
以下是我过去在MySql上的工作。如果要在查询中包含更多关于每个线程的信息,则必须将列添加到SELECT
和GROUP BY
中。
select thread.threadID, max(comments.modifiedOn) as threadUpdated
from thread inner join comments on thread.threadID = comments.threadID
group by 1
order by 2 desc;
此查询服务于您的主请求,它是按我最近的注释排序的线程列表。它不会返回没有注释的线程,您需要将连接更改为外部连接才能执行此操作。
关于php - MySQL Query为我正在创建的论坛创建“凹凸系统”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/726472/