Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Finden der neuesten Nachricht aus der Tabelle, gruppiert nach Benutzer in mysql

Probieren Sie es aus:

select *from messages mwhere notexists (select 1from messages mmwhere (mm.fromuser =m.fromuser oder mm.fromuser =m.touser) AND (mm.touser =m.touser oder mm.touser =m.fromuser) und mm.timestamp> m.timestamp) und m.fromuser ='user1' oder m.touser ='user1';

Demo hier .

In Zukunft wäre es wahrscheinlich besser, Konversationen zwischen zwei Benutzern als eine bestimmte Konversation zu kennzeichnen, dann gehört jede Nachricht zu einer Konversation, und somit wird es viel einfacher, Konversationen zu finden, an denen der Benutzer beteiligt ist, und Informationen zu Nachrichten, die sich darauf beziehen Gespräch. Wie auch immer.

Versuchen Sie es stattdessen mit diesem. Ähm.

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 ist wahrscheinlich besser als not exists Version, auch wenn ich es schaffe, diese zu reparieren.

diese Geige funktioniert tatsächlich