Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wiadomości prywatne - wątki wiadomości
Forum PHP.pl > Forum > Bazy danych > MySQL
dtrb
mam taką bazę

id_wiadomosci
id_watku
data
id_nadawcy
id_odbiorcy
status_nadawcy
status_odbiorcy
tresc

chcę zrobić wiadomości prywatne ale żeby były grupowane w wątkach, tu zabrakło mi logicznego myślenia

chciałbym, żeby user #1 wchodził na stronę wiadomości i widział wiadomości od użytkowników z którymi pisał lub które otrzymał od innych, z góry na dół od najnowszej tak jak jest np w smsach w iphonie, później wybiera dany wątek danego usera i widzi cała historię korespondencji z danym userem od najnowszej do najstarszej...

widzę okiem wyobraźni jak to ma działać ale nie wiem jak o to zapytać aby konstruktywnie odpowiedziała mi baza danych

za łopatologiczne wskazówki, podpowiedzi byłbym baardzo wdzięczny!

proszę o pomoc!
markonix
Tabela konwersacje.
- id
- rozpoczął
- odbiorca
- tytuł
- jakieś podsumowania (dla ułatwienia np. suma wiadomości, liczba nieprzeczytanych itp).
Tabela wiadomości
- id
- id konwersacji
- wysyłający
- treść
- data

Listujesz konwersacje gdzie jesteś odbiorcą lub nadawcą.
Klikasz w konwersacje i pobierasz wiadomości na podstawie ID sortowane wg daty.
dtrb
baza rozwiązała problem, tylko chce zrezygnować z tytułu a w miejsce jego żeby wyświetlała się najnowsza wiadomość z tabeli wiadomosci

mam zapytanie
select * from konwersacje where rozpoczal=(tu zalogowany użytkownik) or odbiorca=(tu zalogowany użytkownik)

tylko nie wiem jak dodać zapytanie do tabeli wiadomosci żeby w danej konwersacji we wspomniane miejsce tytułu pojawiła się ta najnowsza wiadomość z tabeli wiadomości i żeby przenosiło wątek(konwersację) na góre listingu konwersacji wg daty najnowszej wiadomości z tabeli wiadomości

tongue.gif mam nadzieję że nie skomplikowałem opisu ehh
markonix
Możesz próbować zrobić JOIN ale niestety nie jest to łatwe aby dołączyć najnowszy wpis (nie można posortować przed joinem).
Możesz spróbować zrobić subzapytanie z MAX ale też nie wiem czy działa na datach, a też nie wyciągnie treści wiadomości.

1) pobierasz wszystkie konwersacje, a potem już w PHP w pętli pobierasz do każdej ostatnią wiadomość
albo
2) dodaje kolumnę ostatnia_wiadomosc i data_ostatnia_wiadomosc.

Pierwszy sposób unika dublowania danych ale generuje dużo zapytań (ewentualnie można to zmienić w jedno z IN ale wtedy znów więcej roboty w PHP).
Drugi jest prosty ale też niezbyt ładny.

Musisz jeszcze pomyśleć o fladze czy przeczytane, czy usunięte, liczbie nieprzeczytanych wiadomości (nowe wiadomości).
dtrb
właśnie męczyłem się z JOIN i lipa i wpadłem na sugerowane rozwiązanie ja zrobiłem to na hytlumytlu czyli metodą wiochy, do pętli konwersacje dodałem select z wiadomosci ktory ma warunek id_konwersacji=id z petli konwersacje ustawilem sortowanie daty desc z limitem jeden i wyswietlaja sie ostatnie wiadomosci z tabeli wiadomosci

a sortowanie konwersacji wg daty przychodzacej wiadomosci rozwiazałem dodając kolumne data do tabeli konwersacje i w tedy ustawie w formularzu aktualizacje tego pola zawsze na najnowsza date po wyslaniu wiadomosci w danej konwersacji tongue.gif


zapewne spotka się to zwielką krytyką tongue.gif ale działa na poziomie prostych testów ;P a i duma mnie przepełnia bo z moją mikro wiedzą rozwiązałem to metodami jakimi potrafiłem smile.gif

oczywiście dzięki wielkie bo bez Ciebie nie wiedziałbym jak się za to zabrać smile.gif


EDIT

status o odczytaniu dodalem do tabelki wiadomosci, a ilosc wiadomosci w konwersacji dodalem do tabelki konwersacje, reszte jak ilosc nowych zrobie w skrypcje ktory bedzie przeliczal ststusy 0 i wyswietlal ich liczbe
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.