sql >> Databáze >  >> RDS >> Mysql

Hledání nejnovější zprávy z tabulky, seskupené podle uživatelů v mysql

Vyzkoušejte toto:

vyberte *ze zpráv mwhere not exists (vyberte 1ze zpráv mmwhere (mm.fromuser =m.fromuser nebo mm.fromuser =m.touser) AND (mm.touser =m.touser nebo mm.touser =m.fromuser) a mm.timestamp> m.timestamp) a m.fromuser ='user1' nebo m.touser ='user1';

ukázka zde .

Do budoucna by pravděpodobně bylo lepší označit konverzace mezi dvěma uživateli jako konkrétní konverzaci, pak by každá zpráva patřila do konverzace, a tak je mnohem snazší najít konverzace, kterých se uživatel účastní, a informace o zprávách souvisejících s konverzace. Každopádně.

Zkuste místo toho tento. Fuj.

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;

Je pravděpodobné, že bude lepší než not exists verzi, i když se mi ji podaří opravit.

tyto housle skutečně fungují




  1. Nelze nainstalovat mysqlclient na centos

  2. Připojení ke stejnému stolu více než jednou

  3. Je možné spustit pravidlo apriori asociace v příkazu mysql?

  4. Výběr náhodných řádků pomocí MySQL