sql >> Base de Datos >  >> RDS >> Mysql

Encontrar el último mensaje de la tabla, agrupado por usuario en mysql

Prueba esto:

seleccione *de mensajes mwhere no existe (seleccione 1de mensajes mmwhere (mm.fromuser =m.fromuser o mm.fromuser =m.touser) AND (mm.touser =m.touser o mm.touser =m.fromuser) y mm.timestamp> m.timestamp) y m.fromuser ='usuario1' o m.touser ='usuario1';

demostración aquí .

Probablemente sería mejor, en el futuro, marcar las conversaciones entre dos usuarios como una conversación en particular, entonces cada mensaje pertenece a una conversación y, por lo tanto, es mucho más fácil encontrar conversaciones en las que participa el usuario e información sobre mensajes relacionados con el conversación. De todos modos.

Prueba este en su lugar. Uf.

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;

Es probable que sea superior al not exists versión, incluso si logro arreglar esa.

este violín realmente funciona