Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> wiadomości prywatne - wątki wiadomości
dtrb
post
Post #1





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 31.01.2011

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


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!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
markonix
post
Post #2





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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.

Ten post edytował markonix 3.11.2012, 22:39:31
Go to the top of the page
+Quote Post
dtrb
post
Post #3





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 31.01.2011

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


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

(IMG:style_emoticons/default/tongue.gif) mam nadzieję że nie skomplikowałem opisu ehh

Ten post edytował dtrb 4.11.2012, 01:45:15
Go to the top of the page
+Quote Post
markonix
post
Post #4





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


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).
Go to the top of the page
+Quote Post
dtrb
post
Post #5





Grupa: Zarejestrowani
Postów: 32
Pomógł: 0
Dołączył: 31.01.2011

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


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 (IMG:style_emoticons/default/tongue.gif)


zapewne spotka się to zwielką krytyką (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

oczywiście dzięki wielkie bo bez Ciebie nie wiedziałbym jak się za to zabrać (IMG:style_emoticons/default/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

Ten post edytował dtrb 4.11.2012, 03:14:52
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.12.2025 - 18:25