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

Czy istnieje prostszy sposób na osiągnięcie tego stylu komunikacji z użytkownikami?

hmm może nie rozumiem poprawnie twojego problemu... ale dla mnie rozwiązanie jest dość proste:

SELECT c.*, MAX(m.time) as latest_post 
FROM conversations as c 
INNER JOIN messages as m ON c.id = m.conversation_id
WHERE c.userId = 222 OR c.friendId = 222 
GROUP BY c.id
ORDER BY latest_post DESC

oto moje dane testowe:

Rozmowy:

id  userId  friendId
1   222     333
2   222     444

Wiadomości:

id  message     time (Desc)     conversation_id
14  rty     2012-05-14 19:59:55     2
13  cvb     2012-05-14 19:59:51     1
12  dfg     2012-05-14 19:59:46     2
11  ert     2012-05-14 19:59:42     1
1   foo     2012-05-14 19:22:57     2
2   bar     2012-05-14 19:22:57     2
3   foo     2012-05-14 19:14:13     1
8   wer     2012-05-13 19:59:37     2
9   sdf     2012-05-13 19:59:24     1
10  xcv     2012-05-11 19:59:32     2
4   bar     2012-05-10 19:58:06     1
6   zxc     2012-05-08 19:59:17     2
5   asd     2012-05-08 19:58:56     1
7   qwe     2012-05-04 19:59:20     1

Wynik zapytania:

id  userId  friendId    latest_post
2   222     444     2012-05-14 19:59:55
1   222     333     2012-05-14 19:59:51

Jeśli to nie to... po prostu zignoruj ​​moją odpowiedź :P

Mam nadzieję, że to pomoże



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql:zobaczyć wszystkie otwarte połączenia z daną bazą danych?

  2. Jak zaimportować bazę danych za pomocą phpMyAdmin

  3. czy istnieje sposób na wyświetlenie listy wszystkich słów zastrzeżonych w mysql za pomocą narzędzia wiersza poleceń mysql?

  4. Łączniki w nazwach kolumn w MySQL DB

  5. Powolne zapytanie Mysql:INNER JOIN + ORDER BY powoduje sortowanie plików