Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ograniczenie na left JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
tabbi
Układ bazy jest jak: https://github.com/jrmadsen67/Mahana-Messag...ster/mahana.sql

Zapytanie:

  1. $sql = 'SELECT m.*, s.status, t.subject, '.USER_TABLE_USERNAME .
  2. ' FROM msg_participants p ' .
  3. ' JOIN msg_threads t ON (t.id = p.thread_id) ' .
  4. ' JOIN msg_messages m ON (m.thread_id = t.id) ' .
  5. ' JOIN ' .USER_TABLE_TABLENAME. ' ON ('.USER_TABLE_ID.' = m.sender_id) '.
  6. ' JOIN msg_status s ON (s.message_id = m.id AND s.user_id = ? ) ' .
  7. ' WHERE p.user_id = ? ' ;
  8. if (!$full_thread)
  9. {
  10. $sql .= ' AND m.cdate >= p.cdate';
  11. }
  12. $sql .= ' ORDER BY t.id '.$order_by. ', m.cdate '.$order_by;


Co chce zrobić to pobrać jedynie ostatnie wiadomości z danego wątku.

Więc zastępuje msg_messages dodatkowym selectem ale to nie działa !

  1. JOIN msg_messages m ON ( (SELECT b.thread_id FROM msg_messages AS b ORDER BY b.id DESC LIMIT 1) = t.id)' .
mmmmmmm
JOIN (SELECT id, Max(thread_id) As thread_id FROM msg_messages) x ON t.id=x.id and x.thread_id=t.thread_id
tabbi
  1. JOIN (SELECT id, Max(thread_id) AS thread_id FROM msg_messages) x ON t.id=x.id AND x.thread_id=t.thread_id
  2. [SQL]
  3.  
  4. Poprawnie
  5. [sql]
  6. JOIN (SELECT id, Max(thread_id) AS thread_id FROM msg_messages) x ON x.thread_id=t.id


I niestety nie zwraca poprawnego wyniku. Są 3 wątki a dostaje tylko ostatnią wiadomość z 1 wątku. A docelowo powinnienem dostać 3 wątki i 3 ostatnie wiadomości pojedyńczo nich przypisane.
mmmmmmm
Zapomniałem o grupowaniu...
  1. JOIN (SELECT id, Max(thread_id) AS thread_id FROM msg_messages GROUP BY 1) x ON x.thread_id=t.id
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.