我试图通过收到帖子的最后一个回复来复制论坛功能。
为清楚起见,请参阅PHPBB:有四列,最后一列是我想要复制的内容。
我的表格是这样创建的:
我正在考虑创建一个链接表,每次回复帖子时都会更新。
链接表如下:
但是,我希望有一个提前查询来实现这个方法。也就是说,抓住每个家长讨论,并在每个家长讨论中找到最后一个回复。
我是否有这样的疑问?
这是一个更新。 我仍然有点麻烦,但我觉得我差不多了。
我当前的查询:
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但它们是“起始线程”或“父帖”
它们不应该合并,我将如何继续“分组”但是“忽略”空值?
答案 0 :(得分:2)
此查询将按照parent_id进行最高(因此假设为最新)讨论。不是最好的解决方案......
select discussion_id, user_id, pubdate
from tablename
where discussion_id in
(
select max(discussion_id)
from tablename
group by parent_id
)
答案 1 :(得分:1)
您可以尝试这样的事情:
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
当您拥有ID最高的帖子时,左侧连接到讨论c将不匹配,该帖子应该是您想要的行。
答案 2 :(得分:-2)
你想要GROUP BY。这应该可以了:
SELECT MAX(`pubdate`), `discussion_id`, `user_id` FROM `table` GROUP BY `parent_id`
您显然需要根据需要填写适当的WHERE子句和LIMIT。