Coba ini:
pilih *dari pesan yang tidak ada (pilih 1dari pesan mmwhere (mm.fromuser =m.fromuser atau mm.fromuser =m.touser) AND (mm.touser =m.touser atau mm.touser =m.fromuser) dan mm.timestamp>
m.timestamp) dan m.fromuser ='user1' atau m.touser ='user1';
Mungkin akan lebih baik, ke depan, untuk menandai percakapan antara dua pengguna sebagai percakapan tertentu, maka setiap pesan termasuk dalam percakapan, dan dengan demikian menjadi jauh lebih mudah untuk menemukan percakapan yang melibatkan pengguna, dan info tentang pesan yang terkait dengan percakapan. Pokoknya.
Coba yang ini sebagai gantinya. Ugh.
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;
Ini mungkin lebih unggul dari not exists
versi, bahkan jika saya berhasil memperbaikinya.
biola ini benar-benar berfungsi