sql >> Database >  >> RDS >> Mysql

Het laatste bericht uit de tabel vinden, gegroepeerd op gebruiker in mysql

Probeer dit eens:

selecteer *uit berichten mwaar niet bestaat (selecteer 1uit berichten mmwaar (mm.fromuser =m.fromuser of mm.fromuser =m.touser) AND (mm.touser =m.touser of mm.touser =m.fromuser) en mm.timestamp> m.timestamp) en m.fromuser ='user1' of m.touser ='user1';

demo hier .

Het zou in de toekomst waarschijnlijk beter zijn om gesprekken tussen twee gebruikers te markeren als een bepaald gesprek, dan hoort elk bericht bij een gesprek, en wordt het dus veel gemakkelijker om gesprekken te vinden waarbij de gebruiker betrokken is, en informatie over berichten met betrekking tot de gesprek. Hoe dan ook.

Probeer in plaats daarvan deze. 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;

Het is waarschijnlijk superieur aan de not exists versie, zelfs als het me lukt om die te repareren.

deze viool werkt echt




  1. Aangepaste MySQL-kolomindeling afdwingen?

  2. C# en MySql-integratie

  3. Database back-up SQL-query

  4. Beperking van algemene criteria in Hibernate voor alle query's voor alle tabellen