我有一个名为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。
我期待听到你的想法。
答案 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语句,以便更好地理解我所说的内容。