Probeer dit eens:
selecteer *uit berichten mwaar niet bestaat (selecteer 1uit berichten mmwaar (mm.fromuser =m.fromuser of mm.fromuser =m.touser) AND (mm.touser =m.touser of mm.touser =m.fromuser) en mm.timestamp>
m.timestamp) en m.fromuser ='user1' of m.touser ='user1';
Het zou in de toekomst waarschijnlijk beter zijn om gesprekken tussen twee gebruikers te markeren als een bepaald gesprek, dan hoort elk bericht bij een gesprek, en wordt het dus veel gemakkelijker om gesprekken te vinden waarbij de gebruiker betrokken is, en informatie over berichten met betrekking tot de gesprek. Hoe dan ook.
Probeer in plaats daarvan deze. 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;
Het is waarschijnlijk superieur aan de not exists
versie, zelfs als het me lukt om die te repareren.