在基于线程的消息传递系统中,表架构为

> messages table
id(int auto incr primary key)
body(varchar)
time(datetime)

>message_reference table
id(int auto incr primary key)
message_id(forgain key from message table)
sender
receiver


在这里,我要选择发送到新接收者的第一个消息ID,发送者是已登录的用户。

显然可以通过多个查询和一些代码来执行此操作,但是可以通过单个查询来解决性能问题吗?

最佳答案

你可以试试

编辑:

如果id是自动递增的,则id也会随着时间增加,您可以使用:

SELECT message_reference.message_id, message_reference.receiver, messages.body
FROM message_reference, messages
WHERE message_reference.message_id IN (SELECT  MIN(message_reference.message_id)
                            FROM message_reference
                            GROUP BY message_reference.receiver)
AND message_reference.message_id = messages.id AND message_reference.sender = <sender>

关于mysql - 从表中选择具有不同列值的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7596879/

10-13 08:06