Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Skrzynka prywatnych wiadomości, Pomoc w logice działania
Poker
post 6.06.2012, 21:03:45
Post #1





Grupa: Zarejestrowani
Postów: 205
Pomógł: 3
Dołączył: 20.04.2009
Skąd: Jaworzno

Ostrzeżenie: (0%)
-----


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





--------------------
:) na miliony przyjdzie czas...
Go to the top of the page
+Quote Post
kpt_lucek
post 6.06.2012, 21:07:13
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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

I pokaż działanie o ile mozliwe.

Ten post edytował kpt_lucek 6.06.2012, 21:07:42


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
Poker
post 6.06.2012, 21:11:49
Post #3





Grupa: Zarejestrowani
Postów: 205
Pomógł: 3
Dołączył: 20.04.2009
Skąd: Jaworzno

Ostrzeżenie: (0%)
-----


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ść.




--------------------
:) na miliony przyjdzie czas...
Go to the top of the page
+Quote Post
patrysiek2
post 6.06.2012, 21:28:38
Post #4





Grupa: Zarejestrowani
Postów: 108
Pomógł: 5
Dołączył: 8.12.2011
Skąd: Łomża

Ostrzeżenie: (0%)
-----


a probowales tak? [php]... ORDER BY DATA DESC[/PHP ]


--------------------
if($problem == 1)
{
header("Location: http://www.forum.php.pl");
}
else
{
thinking();
}
Go to the top of the page
+Quote Post
Poker
post 6.06.2012, 21:35:44
Post #5





Grupa: Zarejestrowani
Postów: 205
Pomógł: 3
Dołączył: 20.04.2009
Skąd: Jaworzno

Ostrzeżenie: (0%)
-----


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.


--------------------
:) na miliony przyjdzie czas...
Go to the top of the page
+Quote Post
thek
post 10.06.2012, 18:37:56
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Domyślnie przy grupowaniu bierze pierwszy pasujący rekord spośród grupowanych. Dlatego najprostsze rozwiązanie to przed grupowaniem już posortować rekordy.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.08.2025 - 22:33