在ORDER BY之后进行区分


DISTINCT after ORDER BY

我基本上是在创建一个论坛。我正在输出所有主题,我的"posts"answers"members"表与之相连。这样我就可以在主题索引上显示帖子和成员信息。

我想做的是收集最后三个发布的成员的用户名,我只想要唯一的值(如果有人重复发布,没有重复的值)。我目前正在使用DISTINCT,但问题是用户名是在向后排序后分组的。如果有人做了第一篇也是最后一篇帖子,我将无法在这个列表中检索他们的用户名。

这是我正在使用的代码:

SUBSTRING_INDEX(
  GROUP_CONCAT(DISTINCT `members`.`username` ORDER BY `posts`.`date` DESC SEPARATOR '''''') , '''''', 3
) AS member_last_username

有没有一种方法可以修改代码,使用户名在分组之前向后排序?如果我的问题令人困惑,我深表歉意!

当然,按照您想要的方式对数据进行排序,并将其用作输入。

SELECT 
  SUBSTRING_INDEX(
    GROUP_CONCAT(DISTINCT sub.username ORDER BY sub.`date` 
                 DESC SEPARATOR '''''') , '''''', 3
  ) AS member_last_username
FROM (SELECT m.username, p.`date` 
      FROM members m
      INNER JOIN post p ON (some join or other)
      ORDER BY backwards ordering ) sub