Mysql 如何编写一个查询,为my users表中的每个用户检索3个回复?
我想在我的users表中显示每个用户的三个回复,例如,如果我有3个用户,并且每个用户都回复了10条消息,那么我希望我的查询只检索9条回复,而不是我的messages\u reply表中的所有回复 以下是我尝试过的: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
$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