Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何编写一个查询,为my users表中的每个用户检索3个回复?_Mysql_Sql_Join_Greatest N Per Group - Fatal编程技术网

Mysql 如何编写一个查询,为my users表中的每个用户检索3个回复?

Mysql 如何编写一个查询,为my users表中的每个用户检索3个回复?,mysql,sql,join,greatest-n-per-group,Mysql,Sql,Join,Greatest N Per Group,我想在我的users表中显示每个用户的三个回复,例如,如果我有3个用户,并且每个用户都回复了10条消息,那么我希望我的查询只检索9条回复,而不是我的messages\u reply表中的所有回复 以下是我尝试过的: $replyquery="select * from messages_reply LEFT JOIN users ON messages_reply.from_id=users.id GROUP BY messages_re

我想在我的users表中显示每个用户的三个回复,例如,如果我有3个用户,并且每个用户都回复了10条消息,那么我希望我的查询只检索9条回复,而不是我的messages\u reply表中的所有回复

以下是我尝试过的:

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

我知道我写的内容意味着只能给我3条回复,那么我如何才能给我的用户表中的每个用户带来3条回复?

在许多数据库中,您可以使用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

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

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

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


请用您正在使用的数据库标记您的问题。我觉得您的答案是正确的,但您能告诉我“rn”是什么吗?@LitAnalysis:rn是子查询中计算的行数结果的别名。
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