Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Skrzynka prywatnych wiadomości
Forum PHP.pl > Forum > Przedszkole
Poker
Witam serdecznie,

Dawno mnie tutaj nie było ale moja głowa już nie potrafi znaleźć nowego rozwiązania, wiec chciałbym prosić Was o pomoc.
Otóż posiadam w swoim serwisie prywatne wiadomości i mam mały problem z nimi.

Otóż działają one na zasadzie, czatu gdzie ludzie ze sobą mogą rozmawiać bez przeładowania strony czyli można powiedzieć taki komunikator.

Użytkownik [X] który nigdy nie rozmawiał z użytkownikiem [Y] pisząc do niego prywatną wiadomość rozpoczyna ROZMOWĘ, a w rozmowe znajdują się wiadomości przesłane do siebie.



Schemat bazy danych wygląda nastepująco :

TABELA MESSSAGE_talk - Tutaj zapisywane są rozmowy, do których podpięte będą dopiero przesłane wiadomości
  1. CREATE TABLE `MESSAGE_talk` (
  2. `id` int(9) NOT NULL AUTO_INCREMENT,
  3. `idSender` int(9) NOT NULL,
  4. `idUser` int(9) NOT NULL,
  5. `ipAdress` varchar(25) NOT NULL,
  6. `dateStart` datetime NOT NULL,
  7. `viewSender` enum('0','1') DEFAULT '1',
  8. `viewUser` enum('0','1') DEFAULT '1',
  9. `dateLastMessage` datetime NOT NULL
  10. ) ENGINE=MyISAM;



TABELA MESSSAGE_messages - Tutaj zapisywane są wiadomości należące do rozmowy, wspólny klucz MESSAGE_talk.id = MESSAGE_messages.idTalk
  1. CREATE TABLE `MESSAGE_messages` (
  2. `id` int(9) NOT NULL AUTO_INCREMENT,
  3. `idTalk` int(9) NOT NULL,
  4. `idSender` int(9) NOT NULL,
  5. `idUser` int(9) NOT NULL,
  6. `text` text NOT NULL,
  7. `ipAdress` varchar(25) NOT NULL,
  8. `addDate` datetime NOT NULL,
  9. `read` enum('0','1') NOT NULL DEFAULT '0'
  10. ) ENGINE=MyISAM;



---------------------------------------------------------------------------------------------------
W chwili obecnej wszystko działa poprawnie, poczta jest sprawna, ale mam problem z wyświetlaniem Rozmów po przejściu do /poczta

Chciałbym aby były wyświetlane rozmowy, według kolejności w jakiej ostatnio otrzymałem odpowiedź.


I tutaj są dla mnie schodzi, bo w chwili obecnej wyciągam dane grupując wiadomości, ale nie mogę już sortować według daty przesłania wiadomości, przez co rozmowa rozpoczęta wczoraj, jest gdzieś na szarym końcu mimo, że posiada nową wiadomość.

Dane wyciągam takim zapytaniem ->

  1. mysql_query("SELECT msg.idTalk, msg.text, msg.addDate, msg.read, user.login, user.pseudonym, user.avatar FROM MESSAGE_messages AS msg LEFT JOIN MESSAGE_talk AS talk ON talk.id = msg.idTalk LEFT JOIN PROFILE_users AS user ON user.id = msg.idSender WHERE msg.idUser='$myId' GROUP BY msg.idTalk ORDER BY talk.dateLastMessage DESC ");



Niestety Order tutaj i tak nie ma znaczenia, bo wyniki i tak są wyświetlane w zły sposób.
Wiem że może być ciężko to zrozumieć, ale może uda się komuś załapać o co mi chodzi, mogę pokazać przykład na żywo jak to wygląda.

Byłbym bardzo wdzięczny za pomoc w nakierowaniu w którą stronę iść, bo już mocno przekombinowałem sobie i teraz stoję w martwym punkcie.
W najgorszym wypadku przepiszę całą pocztę na nowo.

Z góry bardzo dziękuję za pomoc



kpt_lucek
A gdybyś sortował po ID od końca smile.gif?

I pokaż działanie o ile mozliwe.
Poker
Ustawiając sortowanie według msg.id DESC, lub msg.id ASC różnica polega tylko na sortowaniu tego kiedy zostąła wysłana ta pierwsza wiadomość, próbowałem już takimi sposobami ale tutaj chyba gryzie się GROUP i ORDER.


Poczta wygląda w taki sposób, czyli to co teraz wyświetla:
I tutaj widać że posiadam listę rozmów, i data która tam się pojawia jest datą otrzymania ostatniej wiadomości od użytkownika.
chciałbym sortować według tej daty.

I dodatkowo wiadomość która się pojawia, jest pierwszą wysłaną wiadomością, a chciałbym właśnie wyświetlać też ostatnią otrzymaną wiadomość.


patrysiek2
a probowales tak? [php]... ORDER BY DATA DESC[/PHP ]
Poker
Teraz sprawdzam i to mój błąd, w wysłanych wiadomościach miałem dobrze zrobione, tutaj wkradł się błąd i właśnie błędnie wyświetlałem.

Więc dziękuję bardzo za pomoc, jednak nadal pozostaje problem wyświetlania pierwszej wiadomości z rozmowy, a ma to być ostatnia wiadomość z rozmowy.
thek
Domyślnie przy grupowaniu bierze pierwszy pasujący rekord spośród grupowanych. Dlatego najprostsze rozwiązanie to przed grupowaniem już posortować rekordy.
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.