1

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

所以我需要的是一个帖子列表,以便他们得到回复。

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

桌子的图像

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

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

1 回答 1

0

您的子查询称为从属子查询。它们会使查询变得非常慢,因为它们会重复很多次。

改为加入您的子查询。这样它只会被使用一次,事情就会加快。试试这个子查询来生成一个最大帖子 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
于 2020-10-22T12:25:30.420 回答