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
我需要一个基于 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