首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写查询,为“用户”表中的每个用户检索3个答复?

如何编写查询,为“用户”表中的每个用户检索3个答复?
EN

Stack Overflow用户
提问于 2020-03-20 17:40:42
回答 2查看 56关注 0票数 2

我希望显示来自我在user表中的每个用户的三个回复,因此,例如,如果我有3个用户,并且每个用户都回复了10条消息,我希望我的查询只检索9个回复,而不是我的messages_reply表中的所有回复。

以下是我尝试过的:

代码语言:javascript
复制
     $replyquery="select * 
     from messages_reply 
     LEFT JOIN users 
     ON messages_reply.from_id=users.id 
     GROUP BY messages_reply.id LIMIT 3";

我知道我所写的意味着只给我带来3个回复,那么我如何从我的用户表中的每个用户获得3个回复呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-20 17:48:44

在许多数据库中,您可以为此使用row_number()

代码语言:javascript
复制
select *
from (
    select mr.*, u.*, row_number() over(partition by u.id order by mr.id desc) rn
    from messages_reply mr
    inner join users u on mr.from_id = u.id 
) t
where rn <= 3

如果您正在运行MySQL < 8.0,正如我从查询中使用group by的松懈中猜测到的那样:

代码语言:javascript
复制
select mr.*, u.*
from messages_reply mr
inner join users u on mr.from_id = u.id 
where mr.id >= (
    select mr1.id
    from messages_reply mr1
    where mr1.from_id = u.id 
    order by mr1.id desc
    limit 2, 1
)

这将为每个用户提供具有最大id的3条消息回复。

票数 0
EN

Stack Overflow用户

发布于 2020-03-20 17:53:40

查询没有测试,只是一个概念

代码语言:javascript
复制
SELECT *
FROM users
LEFT JOIN (
    SELECT *
    FROM messages_reply
    WHERE from_id = users.id
    ORDER BY <your wanted order field> DESC
    LIMIT 3) replies
    ON users.id = replies.from_id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60779046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档