sql distinct 或 group by 以获得正确的顺序
sql distinct or group by to get correct order
好的,所以我有一个 post 的列表,一些 post 是对其他 post 的回复。我想要一份 post 位家长的名单,按回复顺序倒序排列。
我试过 group by 但它总是列出错误的顺序并且 distinct 是我设法让它工作的唯一方法但显然它只列出 post id 而不是其余的的数据。
此处为数据库示例
我要拉出post的顺序是1,3,5,4,2 这些是未回复的post按最新回复的顺序排列。
SELECT DISTINCT `thread`
FROM
(
SELECT COALESCE(NULLIF(`parent_post`, 0), `postID`) AS `thread`
FROM `posts`
ORDER BY `postID` DESC
LIMIT 100
) `sub`
这会以正确的顺序将它们拉出,但显然只会拉出 postID 而不是其余字段,我试过分组但它失去了正确的顺序。
将您的要求直接翻译为 SQL 将是:
select *
from posts p1
where parent_post = 0
order by (
select max("datetime")
from posts p2
where p2.parent_post = p1.postID
) desc
即select 来自 posts
的所有行是线程启动者(不是回复),并按降序排列他们任何回复的最新时间戳。
好的,所以我有一个 post 的列表,一些 post 是对其他 post 的回复。我想要一份 post 位家长的名单,按回复顺序倒序排列。
我试过 group by 但它总是列出错误的顺序并且 distinct 是我设法让它工作的唯一方法但显然它只列出 post id 而不是其余的的数据。
此处为数据库示例
我要拉出post的顺序是1,3,5,4,2 这些是未回复的post按最新回复的顺序排列。
SELECT DISTINCT `thread`
FROM
(
SELECT COALESCE(NULLIF(`parent_post`, 0), `postID`) AS `thread`
FROM `posts`
ORDER BY `postID` DESC
LIMIT 100
) `sub`
这会以正确的顺序将它们拉出,但显然只会拉出 postID 而不是其余字段,我试过分组但它失去了正确的顺序。
将您的要求直接翻译为 SQL 将是:
select *
from posts p1
where parent_post = 0
order by (
select max("datetime")
from posts p2
where p2.parent_post = p1.postID
) desc
即select 来自 posts
的所有行是线程启动者(不是回复),并按降序排列他们任何回复的最新时间戳。