Wypróbuj to:
wybierz *z wiadomości mgdzie nie istnieje (wybierz 1z wiadomości mmgdzie (mm.fromuser =m.fromuser lub mm.fromuser =m.touser) ORAZ (mm.touser =m.touser lub mm.touser =m.fromuser) i mm.timestamp>
m.timestamp) i m.fromuser ='user1' lub m.touser ='user1';
Prawdopodobnie lepiej, idąc dalej, oznaczać konwersacje między dwoma użytkownikami jako konkretną rozmowę, wtedy każda wiadomość należy do konwersacji, a tym samym znacznie łatwiej będzie znaleźć konwersacje, w które użytkownik jest zaangażowany, oraz informacje o wiadomościach związanych z konwersacją. rozmowa. W każdym razie.
Spróbuj zamiast tego. Fuj.
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;
Prawdopodobnie będzie lepszy niż not exists
wersji, nawet jeśli uda mi się ją naprawić.
te skrzypce faktycznie działają