Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Encontrando a última mensagem da tabela, agrupada por usuário no mysql


Experimente isto:

selecione *das mensagens monde não existe (selecione 1 das mensagens mmonde (mm.fromuser =m.fromuser ou mm.fromuser =m.touser) AND (mm.touser =m.touser ou mm.touser =m.fromuser) e mm.timestamp> m.timestamp) e m.fromuser ='user1' ou m.touser ='user1';

demonstração aqui .

Provavelmente seria melhor, daqui para frente, sinalizar conversas entre dois usuários como uma conversa específica, então cada mensagem pertence a uma conversa e, assim, fica muito mais fácil encontrar conversas em que o usuário está envolvido e informações sobre mensagens relacionadas ao conversação. De qualquer forma.

Tente este em vez disso. Eca.
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;

É provável que seja superior ao not exists versão, mesmo que eu consiga consertar essa.

este violino realmente funciona