【问题标题】:Need to get the last 10 users active in topic需要让最后 10 个用户在主题中处于活跃状态
【发布时间】:2014-04-17 12:31:33
【问题描述】:

我想获取在某个主题中发表评论的最后 10 位用户。

它没有按预期工作。

SELECT DISTINCT 
p.author, a.name
FROM posts p
INNER JOIN users a 
ON a.id = p.author 
AND topicId =  ? 
ORDER BY p.id 
DESC LIMIT 10'


SELECT p.author, a.name
FROM posts.p
INNER JOIN users a
ON a.id = p.author
AND topicId = ?
GROUP BY p.author
ORDER BY p.id
DESC LIMIT 10

这不起作用。我尝试将 group by 与 order by 结合使用。但这也不起作用..有什么建议吗?

结果与 id 索引不匹配。

发布表格内容如下所示:

POST 1 -> user 1
POST 2 -> user 2
POST 3 -> user 3

结果:

2,1 etc. 

订购错误。

【问题讨论】:

    标签: mysql group-by sql-order-by distinct


    【解决方案1】:

    如果我理解正确,我认为这会满足你的要求:

    SELECT p.author, a.name
    FROM posts p INNER JOIN
         users a 
         ON a.id = p.author AND topicId =  ? 
    GROUP BY p.author, a.name
    ORDER BY max(p.id) DESC
    LIMIT 10;
    

    此查询与您的查询之间的主要区别在于显式聚合。然后order by 使用max(p.id) 进行排序。通过只使用p.id,MySQL 从匹配的行中选择一个任意的id——可能是错误的。

    【讨论】:

    • 这会返回最旧的海报仅一行?^^
    【解决方案2】:

    这应该会让你进入前 10 名。

    Select a.author, a.name 
    from users a
    inner join (select top 10 id from posts group by id order by id desc) as posts
    on posts.id = a.author
    where topicID = ? 
    

    【讨论】:

    • 您的 SQL 语法有误;但这不是我需要的。最后 10 位用户提交了特定主题的帖子。
    • 我更新了答案。抱歉,出现语法错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多