如何编写一个查询,为我的用户 table 中的每个用户检索 3 个回复?

How to write a query that retrieves 3 replies for each user in my users table?

我想在我的用户 table 中显示每个用户的三个回复,例如,如果我有 3 个用户并且每个用户都回复了 10 条消息,我希望我的查询只检索 9 个回复,而不是我 messages_reply table.

中的所有回复

这是我尝试过的:

     $replyquery="select * 
     from messages_reply 
     LEFT JOIN users 
     ON messages_reply.from_id=users.id 
     GROUP BY messages_reply.id LIMIT 3";

我知道我写的意思是只给我带来 3 个回复,那么我如何从我的用户中的每个用户带来 3 个回复table?

在许多数据库中,您可以使用 row_number() 来实现:

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 的使用不严:

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 条消息回复。

查询未测试,只是一个概念

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