使用SQL获得最后一个帖子回复
问题描述:
我想通过获取帖子的最后回复来复制论坛功能。使用SQL获得最后一个帖子回复
为了清楚起见,请参阅PHPBB:有四列,最后一列是我喜欢复制的内容。
我有我的表,因为这样产生:
- discussion_id(主键)
- USER_ID
- PARENT_ID
- 评论
- 状态
- pubdate的
我正在考虑创建一个链接表,每次回复帖子时都会更新它。
链接表将如下:
- discussion_id(主键)
- last_user_id
- last_user_update
不过,我希望那里有一个提前查询实现这一目标方法。也就是说,抓住每个家长讨论,并在每个家长讨论中找到最后一个答复。
我说得对,有这样的查询吗?
这里是更新。 我仍然有一点麻烦,但我觉得我快到了。
我当前的查询:
SELECT
`discussion_id`,
`parent_id`,
`user_id` as `last_user_id`,
`user_name` as `last_user_name`
FROM `table1`, `table2`
WHERE `table1`.`id` = `table2`.`user_id`
结果:
discussion_id---------parent_id-----last_user_id-------last_user_name
30---------------------NULL-------------3--------------raiku
31---------------------30---------------2--------------antu
32---------------------30---------------1--------------admin
33---------------------NULL-------------3--------------raiku
添加此:
GROUP BY `parent_id`
把它变成:
discussion_id---------parent_id-----last_user_id-------last_user_name
32---------------------30---------------1--------------admin
33---------------------NULL-------------3--------------raiku
但我希望它变成:
discussion_id---------parent_id-----last_user_id-------last_user_name
30---------------------NULL-------------3--------------raiku
32---------------------30---------------1--------------admin
33---------------------NULL-------------3--------------raiku
ID 30和ID 33共享相同的PARENT_ID:NULL,但他们是“启动线程”或“父后”
他们不应该不被合并,我将如何继续“分组”,但“忽略”空值?
答
该查询将采用每个parent_id的最高(因此假设是最新的)讨论。然而没有最巧妙的解决方案......
select discussion_id, user_id, pubdate
from tablename
where discussion_id in
(
select max(discussion_id)
from tablename
group by parent_id
)
答
你想要GROUP BY。这应该工作正常:
SELECT MAX(`pubdate`), `discussion_id`, `user_id` FROM `table` GROUP BY `parent_id`
您将显然需要填写适当的WHERE子句和LIMIT根据需要。
答
你可以尝试这样的事:当你有最高的ID后
SELECT parent.discussion_id,
child.discussion_id as last_discussion_id,
child.user_id as last_user_id,
child.pubdate as last_user_update
FROM Discussion parent
INNER JOIN Discussion child ON (child.parent_id = parent.discussion_id)
LEFT OUTER JOIN Discussion c ON (c.parent_id = parent.discussion_id AND c.discussion_id > child.discussion_id)
WHERE c.discussion_id IS NULL
左侧加入到讨论C的温度将不匹配,这应成为你想要的行。
对Parent_Id进行分组时,它也将那些为空的分组。那个空的不是组,因为它们本身就是parent_id。我如何根据parent_id进行分组但忽略空值? – Anraiki 2010-04-11 13:51:57