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):
WHERE p.st<3 AND p.th=0 AND p.owner=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:
SELECT p.*, u.login, u.photo FROM pms p LEFT JOIN users u ON p.usr = u.ID WHERE p.owner=1 AND (p.ID=5 OR p.th=5) ORDER BY p.th, p.date
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

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?