Hãy thử cái này:
select * từ các thư không tồn tại (chọn 1 từ các thư mm ở đâu (mm.fromuser =m.fromuser hoặc mm.fromuser =m.touser) VÀ (mm.touser =m.touser hoặc mm.touser =m.fromuser) và mm.timestamp>
m.timestamp) và m.fromuser ='user1' hoặc m.touser ='user1';
Có lẽ sẽ tốt hơn, về sau, gắn cờ các cuộc trò chuyện giữa hai người dùng là một cuộc trò chuyện cụ thể, sau đó mọi tin nhắn thuộc về một cuộc hội thoại và do đó, việc tìm kiếm các cuộc hội thoại mà người dùng tham gia và thông tin về các tin nhắn liên quan đến cuộc hội thoại. Dù sao.
Hãy thử cái này để thay thế. Rất tiếc.
select m.*
from messages m
left join messages m2
on ((m.fromuser = m2.fromuser and m.touser = m2.touser)
or (m.fromuser = m2.touser and m.touser = m2.fromuser))
and m.timestamp < m2.timestamp
where (m.fromuser = 'user1' or m.touser = 'user1')
and m2.id is null;
Nó có khả năng vượt trội hơn so với not exists
phiên bản, ngay cả khi tôi cố gắng sửa lỗi đó.