sql distinct或group by来获得正确的顺序

时间:2018-01-04 12:53:03

标签: sql group-by mariadb distinct coalesce

好的,我有一个帖子列表,有些帖子是对其他帖子的回复。我希望以相反的顺序获得一份帖子父母列表。

我已尝试过分组,但它总是列出错误的顺序,而且唯一的方法是我设法让它工作但显然它只列出了帖子ID,而不是其他的数据

这里的数据库示例

enter image description here

我希望将帖子拉出来的顺序是1,3,5,4,2这些是最新回复顺序中的非回复帖子。

SELECT DISTINCT `thread`
FROM
(
    SELECT COALESCE(NULLIF(`parent_post`, 0), `postID`) AS `thread`
    FROM `posts`
    ORDER BY `postID` DESC
    LIMIT 100
) `sub`

这会以正确的顺序将它们拉出来,但显然只会拔出postID而不是其他字段,我已尝试分组,但它会丢失正确的顺序。

1 个答案:

答案 0 :(得分:0)

您的需求直接转换为SQL将是:

select *
from posts p1
where parent_post = 0
order by (
  select max("datetime")
  from posts p2
  where p2.parent_post = p1.postID
) desc

即。从posts中选择所有作为线程启动器(而不是回复)的行,并按照其任何回复的最新时间戳按降序排序。