これを試してみてください:
select * from messages mwhere not presents(select 1from messages mmwhere(mm.fromuser=m.fromuserまたはmm.fromuser=m.touser)AND(mm.touser=m.touserまたはmm.touser=m.fromuser)およびmm.timestamp>
m.timestamp)およびm.fromuser='user1'またはm.touser='user1';
デモはこちら 。
今後は、2人のユーザー間の会話に特定の会話のフラグを立てると、すべてのメッセージが会話に属するため、ユーザーが関与している会話や、に関連するメッセージに関する情報を見つけるのがはるかに簡単になります。会話。とにかく。
代わりにこれを試してください。うーん。
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;
not exists
よりも優れている可能性があります バージョン、たとえ私がそれを修正することができたとしても。