我希望显示来自我在user表中的每个用户的三个回复,因此,例如,如果我有3个用户,并且每个用户都回复了10条消息,我希望我的查询只检索9个回复,而不是我的messages_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个回复呢?
发布于 2020-03-20 17:48:44
在许多数据库中,您可以为此使用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条消息回复。
发布于 2020-03-20 17:53:40
查询没有测试,只是一个概念
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_idhttps://stackoverflow.com/questions/60779046
复制相似问题