Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用SQL获取帖子的最后回复_Mysql - Fatal编程技术网

Mysql 使用SQL获取帖子的最后回复

Mysql 使用SQL获取帖子的最后回复,mysql,Mysql,我试图通过得到一篇文章的最后回复来复制论坛功能 为了清楚起见,请参阅:共有四列,最后一列是我想要复制的 我创建了如下表格: 讨论id(主键) 用户id 家长id 评论 地位 出版日期 我想创建一个链接表,每次回复帖子时都会更新 链接表如下所示: 讨论id(主键) 最后用户id 上次用户更新 然而,我希望有一个预先查询来实现这个方法。也就是说,抓取每个家长讨论,并在每个家长讨论中找到最后一个答复 有这样的疑问,我说得对吗 这里有一个更新。 我仍然有一点小麻烦,但我感觉我快到了 我当前的查

我试图通过得到一篇文章的最后回复来复制论坛功能

为了清楚起见,请参阅:共有四列,最后一列是我想要复制的

我创建了如下表格:

  • 讨论id(主键)
  • 用户id
  • 家长id
  • 评论
  • 地位
  • 出版日期
我想创建一个链接表,每次回复帖子时都会更新

链接表如下所示:

  • 讨论id(主键)
  • 最后用户id
  • 上次用户更新
然而,我希望有一个预先查询来实现这个方法。也就是说,抓取每个家长讨论,并在每个家长讨论中找到最后一个答复

有这样的疑问,我说得对吗


这里有一个更新。 我仍然有一点小麻烦,但我感觉我快到了

我当前的查询:

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
ID30和ID33共享相同的父线程Id:NULL,但它们是“起始线程”或“父帖子”

它们不应该组合在一起,我如何通过“分组”而不是“忽略”空值来继续呢。这应该可以解决问题:

SELECT MAX(`pubdate`), `discussion_id`, `user_id` FROM `table` GROUP BY `parent_id`
显然,您需要根据需要填写适当的WHERE子句和限制。

您需要。这应该可以解决问题:

SELECT MAX(`pubdate`), `discussion_id`, `user_id` FROM `table` GROUP BY `parent_id`

显然,您需要根据需要填写适当的WHERE子句和限制。

此查询将对每个家长id进行最高(因此假设为最新)的讨论。但不是最简单的解决方案

select discussion_id, user_id, pubdate
from tablename
where discussion_id in
(
  select max(discussion_id)
  from tablename
  group by parent_id
)

此查询将采用每个家长id的最高(因此假设为最新)讨论。但不是最整洁的解决方案

select discussion_id, user_id, pubdate
from tablename
where discussion_id in
(
  select max(discussion_id)
  from tablename
  group by parent_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

当您有id最高的帖子时,讨论c的左连接将不匹配,该帖子应该是您想要的行

您可以尝试以下方法:

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的左连接将不匹配,该帖子应该是您想要的行

这将导致一个错误,指出“讨论id”和“用户id”必须包含在聚合或组中。@Fabian,不,它不。。?如果
GROUPBY
子句不存在,那么它就会存在。@jasonbar Fabian是正确的!您需要将
discussion\u id
user\u id
放入分组中,或者将它们聚合在一起。我认为mysql(与其他数据库不同)确实允许您运行该查询。但我认为,对于非聚合列,您可能会得到多个可能的值,因此结果不一定是正确的correct@Martin史密斯,你真的试过运行类似的查询吗?它可以正常工作。这将导致一个错误,说明“讨论id”和“用户id”必须包含在聚合或分组中。@Fabian,不,它没有。。?如果
GROUPBY
子句不存在,那么它就会存在。@jasonbar Fabian是正确的!您需要将
discussion\u id
user\u id
放入分组中,或者将它们聚合在一起。我认为mysql(与其他数据库不同)确实允许您运行该查询。但我认为,对于非聚合列,您可能会得到多个可能的值,因此结果不一定是正确的correct@Martin史密斯,你真的试过运行类似的查询吗?它工作得很好。在对父\u Id进行分组时,它也会对空的进行分组。空的一个不被认为是组,因为它们本身就是父id。如何按父\u id进行分组而忽略空值?在对父\u id进行分组时,它还会对空值进行分组。空的一个不被认为是组,因为它们本身就是父id。如何按父\u id分组,但忽略空值?