哦,这让我发疯了。我有消息表,简化示例:
id[int] - sender[int] - receiver[int] - conv_id[bigint] - received[int] - stamp[int]
1 2 1 5 1 timestamp+1
2 2 1 5 1 timestamp+2
3 3 1 6 1 timestamp+3
4 4 1 7 1 timestamp+4
5 5 1 8 1 timestamp+5
6 5 1 8 1 timestamp+6
现在我感兴趣的是按接收者分组、限制为 3 个发送者并按标记 DESC 排序的结果。如何做到这一点?
我已经有了这个,但它正在获取所有消息,我相信这不是不降低性能的最佳方法,即使我真的不是 mysql 的大师:
SELECT id, sender, receiver, conv_id FROM
(SELECT m.id, m.sender, m.receiver,m.conv_id
FROM messages AS m WHERE m.receiver = 1 AND m.received = 1
ORDER BY m.stamp DESC) as messages_tmp
WHERE receiver = 1 GROUP BY conv_id ORDER BY NULL LIMIT 0,3
这应该按顺序返回这些结果:
id = 6, id = 4, id = 3
问题是我已经在对 m.received = 0
进行查询,如果没有足够的结果,则 m.received = 1
>。到目前为止,我的数据库还不是太大,但如果它变得更大,我担心它会很慢。我正在考虑限制子查询结果的可能性,但不知道如何做到这一点,并确保在 GROUP 之后我会得到足够的结果。
谢谢。
最佳答案
SELECT id, sender, receiver,conv_id
FROM messages WHERE receiver = 1 AND received = 1
GROUP BY conv_id
ORDER BY id DESC LIMIT 3
关于mysql按顺序查询->限制,排序,组。如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8283853/