PHP / MySQL论坛发布订单

时间:2012-10-26 20:52:39

标签: php mysql forum

我有一个名为cf_posts

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

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

如何设置论坛主页的默认视图,以便最近更新的帖子(包括最新的回复)位于堆的“顶部”,并按日期顺序工作?什么是PHP / MySQL查询?

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

我尝试失败的一个解决方法是GROUP BY父级。 但是这将所有没有回复的主题分组为一个。

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

我期待听到你的想法。

2 个答案:

答案 0 :(得分: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

这是简单的,所以可能存在一些语法问题,但我认为这应该有所帮助。

答案 1 :(得分:0)

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