![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Rozwiązanie jest znane z IPB i wielu innych serwisów.
Osoba A wysyła prywatną wiadomość #1 do B. Osoba B odpisuje na wiadomość #1 i widzi ją na tej samej podstronie (#2 pod #1). Osoba A widzi wątek #1 jako NOWY. Wchodzi do środka. Tam widzi wiadomości - #1 (swoją) i #2 od osoby B. I tak dalej... W skrócie: wiadomości są wyświetlane jako wątki - jak na forum. Dotychczas skrypt wyświetlał wiadomości osobno. Pola w bazie danych: + ID - ID wiadomości + topic - tytuł + owner - właściciel wiadomości, zazwyczaj odbiorca (ten, którego konto obciąża) + usr - odbiorca lub nadawca (w zależności od statusu) + st - status (1 - nowa, 2 - przeczytana, 3 - szkic, 4 - kopia) + date - data wysłania + txt - treść W IPB prawdopodobnie istnieje dodatkowa tabela dla wątków. Ja próbuję zrobić to bez tworzenia dodatkowej tabeli. Założenie: jak najmniejsza ilość pól. Dodałem nowe pole - th - numer wątku, czyli ID wiadomości nadrzędnej. Warunek do listy wiadomości w folderze ODEBRANE (dla użytkownika o ID=1):
Zakładam, że wiadomości nadrzędne mają wartość pola th równą 0. Zapytanie wyświetlające konkretny wątek o ID=5 dla użytkownika o ID=1:
Wszystko wyświetla się dobrze, ale przejdźmy teraz do wysyłania wiadomości: Wg moich przemyśleń odbiorca musi otrzymać osobną kopię wiadomości. Może to jest błędne założenie? Już tłumaczę, o co chodzi. Zarówno odbiorca i nadawca widzą całą swoją korespondencję - wiadomości wysłane i odebrane. Pewnego dnia jedna ze stron chce wyczyścić swoją skrzynkę. Mając tylko 1 kopię wiadomości, będzie to niemożliwe, gdyż wiadomości od niej straci druga osoba (a ona chciała sobie je zatrzymać dla siebie). A więc nadawca przymusowo otrzymuje kopię listu, który wysłał. Wtedy do konfliktu nie dojdzie (IMG:style_emoticons/default/smile.gif) Znacie inne, lepsze rozwiązania, aby zaoszczędzić miejsce? Zaczynają się schody Jak pamiętamy, wiadomości nadrzędne muszą mieć th=0. Wiadomość #1 u osoby B ma inne ID niż u osoby A (bo to oddzielne kopie). Osoba B chce odpisać osobie A. Tylko jest problem. Nie znamy ID wątku u użytkownika A. Gdybyśmy zapisali go w polu "th", osoba B nie zobaczyłaby wątku nadrzędnego na liście w folderze "Odebrane". A przecież odpowiedź ma pojawić się u A pod jego wiadomością, którą wysłał do B. Jakie zatem proponujecie rozwiązanie tego problemu? Mogę pokombinować z polem st (status) - tak, aby w polu th mógł znaleźć się ID wątku. Prostszym wyjściem jest stworzenie nowej kolumny w tabeli (też jest kilka opcji). Może służyć do połączenia z innymi wiadomościami lub określenia, czy jest nadrzędną wiadomością... Jaka jest Wasza wizja? PS. Czy w ten sposób nie złamię patentu na wyświetlanie wiadomości jako wątków? Czy dotyczy on tylko telefonów komórkowych i SMS-ów? Ten post edytował WebCM 12.02.2010, 00:36:40 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Ja próbuję zrobić to bez tworzenia dodatkowej tabeli. Założenie: jak najmniejsza ilość pól. I to jest błąd. Dlaczego? Przy większym obciążeniu może dać nieźle popalić bazie. Problem taki sam, jak przy drzewkach, chyba że coś źle zrozumiałem. Cytat Znacie inne, lepsze rozwiązania, aby zaoszczędzić miejsce? Powiem to tak - lepiej zmarnować więcej miejsca, niż zbędnie komplikować strukturę: KISS |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 21:29 |