Mysql
 sql >> Database >  >> RDS >> Mysql

Trovare l'ultimo messaggio dalla tabella, raggruppato per utente in mysql

Prova questo:

seleziona *dai messaggi mdove non esiste (seleziona 1da messaggi mmdove (mm.dautente =m.dautente o mm.dautente =m.dautente) AND (mm.dautente =m.dautente o mm.dautente =m.dautente) e mm.timestamp> m.timestamp) e m.fromuser ='user1' o m.touser ='user1';

dimostrazione qui .

Probabilmente sarebbe meglio, andando avanti, contrassegnare le conversazioni tra due utenti come una conversazione particolare, quindi ogni messaggio appartiene a una conversazione, e quindi diventa molto più facile trovare conversazioni in cui l'utente è coinvolto e informazioni sui messaggi relativi al conversazione. Comunque.

Prova invece questo. Uffa.

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;

È probabile che sia superiore a not exists versione, anche se riesco a risolverlo.

questo violino funziona davvero