-1

我有一张桌子叫cf_posts

ID pk
user INT
subject VARCHAR
body TEXT
datetime TIMESTAMP
parent INT
category INT
mod INT

当帖子提交到论坛时,默认父级为 0,当帖子作为回复提交时,其父级为原始帖子的 ID。

我怎样才能使论坛主页的默认视图排序为最近更新的帖子(包括最新回复)将位于堆的“顶部”,并按日期顺序工作?PHP/MySQL 查询是什么?

我看到的唯一解决方法是单独的主题和回复表,但如果可能的话,我想远离这种方法。

我尝试过但失败的一种解决方法是 GROUP BY parent。但这将所有没有回复的主题组合在一起。

我还没有尝试过的另一个想法是使原始帖子的父 ID 与帖子 ID 匹配,而不是在输出中包含匹配的 ID 和父 ID。

我期待听到你的想法。

4

2 回答 2

0
SELECT mainPost.subject, lastPost.datetime
FROM cf_posts cfp, 
(
 SELECT * 
 FROM cf_posts subPost
 WHERE subPost.parent = mainPost
 ORDER BY subPost.datetime DESC
 LIMIT 1
)lastPost
WHERE mainPost.parent IS NULL

这是简要完成的,因此可能存在一些语法问题,但我认为这应该会有所帮助。

于 2012-10-26T21:01:53.083 回答
0

您可以执行以下操作:查询您需要的每个单独的事物,因此可能对每个主题进行查询,然后您可以使用 UNION 将所有这些内容捆绑在一起以获得一个列表。现在保留订单的技巧如下。对于每个单独的查询,在返回的结果中附加一个名为 sort 的列,并将该列的每个实例设置为更高的 int 值,然后您可以保证最终结果正确排序。去查看 UNION 的 select 语句,以更好地理解我在说什么。

于 2012-10-26T21:06:46.610 回答