select 列中的唯一值,但顺序基于另一列

select unique values from column but order based on another

我需要一个基于 postID 的 desc 顺序的 parent_threads 的唯一列表,postID 始终是唯一的,但通常 parent_thread 字段对于多个帖子是相同的。

所以我需要一个帖子列表,以便回复它们。

因此,例如在下图中,我需要忽略帖子 400 和 399,因为它们是重复的。我有一个查询可以使用子查询工作,但这个子查询的问题是它有时可能需要 1 秒的时间来查询,我想知道是否有更有效的方法来做到这一点。我试过 group by 和 distinct,但总是得到错误的结果。

imge of the table

这是我生成我想要的结果的查询,它通常很慢。

SELECT `postID`
FROM `posts`
ORDER BY
(
    SELECT MAX(`postID`)
    FROM `posts` `sub`
    WHERE `sub`.`parent_thread` = `posts`.postID
)
DESC

您的子查询称为依赖子查询。他们可以使查询非常慢,因为它们被重复了很多。

加入您的子查询。这样它只会被使用一次,而且速度会加快。尝试使用此子查询生成最大 post 个 ID 的列表,每个父线程一个。

                   SELECT MAX(postID) maxPostID, parent_thread
                     FROM posts
                    GROUP BY parent_thread

然后像这样在您的主查询中使用它

SELECT posts.postID
FROM posts
LEFT JOIN (
                       SELECT MAX(postID) maxPostID, parent_thread
                         FROM posts
                        GROUP BY parent_thread
     ) m ON posts.postID = m.parent_thread
ORDER BY m.maxPostID DESC