如何编写一个查询,为我的用户 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
我想在我的用户 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