Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Znajdowanie ostatniej wiadomości z tabeli, pogrupowanej według użytkownika w mysql

Wypróbuj to:

wybierz *z wiadomości mgdzie nie istnieje (wybierz 1z wiadomości mmgdzie (mm.fromuser =m.fromuser lub mm.fromuser =m.touser) ORAZ (mm.touser =m.touser lub mm.touser =m.fromuser) i mm.timestamp> m.timestamp) i m.fromuser ='user1' lub m.touser ='user1';

pokaz tutaj .

Prawdopodobnie lepiej, idąc dalej, oznaczać konwersacje między dwoma użytkownikami jako konkretną rozmowę, wtedy każda wiadomość należy do konwersacji, a tym samym znacznie łatwiej będzie znaleźć konwersacje, w które użytkownik jest zaangażowany, oraz informacje o wiadomościach związanych z konwersacją. rozmowa. W każdym razie.

Spróbuj zamiast tego. 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;

Prawdopodobnie będzie lepszy niż not exists wersji, nawet jeśli uda mi się ją naprawić.

te skrzypce faktycznie działają




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można zainstalować MySQL na Mac OS X

  2. Jak mogę używać MySQL z Pythonem 3.3 i Django 1.5?

  3. uproszczone:mysqli num_rows nie działa

  4. SQL:Jak zachować kolejność wierszy w DISTINCT?

  5. MySQL 1443:co to znaczy?