sql >> Databasteknik >  >> RDS >> Mysql

Hitta senaste meddelandet från tabellen, grupperat efter användare i mysql

Testa detta:

välj *från meddelanden där det inte finns (välj 1från meddelanden mmdär (mm.fromuser =m.frommuser eller mm.fromuser =m.touser) OCH (mm.touser =m.touser eller mm.touser =m.frommuser) och mm.timestamp> m.timestamp)och m.fromuser ='användare1' eller m.touser ='användare1';

demo här .

Det skulle förmodligen vara bättre, framöver, att flagga konversationer mellan två användare som en viss konversation, då hör varje meddelande till en konversation, och därmed blir det mycket lättare att hitta konversationer som användaren är involverad i, och information om meddelanden relaterade till konversation. Hur som helst.

Prova den här istället. Usch.

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;

Det är sannolikt överlägset not exists version, även om jag lyckas fixa den.

den här fiolen fungerar faktiskt




  1. Använda LogMiner för att hitta aktuella ändringar

  2. Begränsa en SQL Server-anslutning till en specifik IP-adress

  3. Hur ser man om en användare är online på en webbplats med php- och mysql-drivna databaser?

  4. hur man får LAST_INSERT_ID via lagrad procedur i php