Mysql
 sql >> Base de données >  >> RDS >> Mysql

Recherche du dernier message de la table, regroupé par utilisateur dans mysql

Essayez ceci :

select *from messages mwhere not exists (select 1from messages mmwhere (mm.fromuser =m.fromuser or mm.fromuser =m.touser) AND (mm.touser =m.touser or mm.touser =m.fromuser) et mm.timestamp> m.timestamp)et m.fromuser ='user1' ou m.touser ='user1';

démo ici .

Il serait probablement préférable, à l'avenir, de marquer les conversations entre deux utilisateurs comme une conversation particulière, puis chaque message appartient à une conversation, et il devient ainsi beaucoup plus facile de trouver des conversations dans lesquelles l'utilisateur est impliqué, et des informations sur les messages liés à la conversation. Quoi qu'il en soit.

Essayez celui-ci à la place. 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;

Il est susceptible d'être supérieur au not exists version, même si j'arrive à corriger celle-là.

ce violon fonctionne réellement