Myślę, że możesz zachować obecną strukturę tabeli dla treści wiadomości. Zamiast dodawać osobne kolumny lub usunięte flagi, lepiej mieć osobną tabelę dla skrzynek pocztowych.
Więc twoja obecna tabela mbox:
id message sentby sentto created
Następnie kolejna tabela dla skrzynek pocztowych użytkowników
id user mailbox message_id
Podczas pisania wiadomości musiałbyś wykonać trzy wstawki, po jednym do tabeli wiadomości, dla każdego użytkownika w tabeli user_mailboxes.
Twoje dane mbox wyglądają więc tak:
id message sentby sentto created
1 Hi There UserA UserB 2015-01-26
2 Hello Back UserB UserA 2015-01-26
A dane user_mailboxes wyglądają tak:
id user mailbox message_id
1 UserA Out 1
2 UserB In 1
3 UserB Out 2
4 UserA In 2
Pozwala to na usunięcie pojedynczych wierszy z tabeli user_mailboxes. Pozwoliłoby to również na przyszłe dodatki, umożliwiając wysyłanie wiadomości do wielu użytkowników jednocześnie (nowy wiersz dla każdego użytkownika) i umożliwiałoby dodanie więcej niż jednej skrzynki pocztowej w razie potrzeby (przychodzące, wychodzące, kosz, ważne itp.).
Aby wyszukać pocztę użytkownika w określonej skrzynce pocztowej, wystarczy użyć opcji dołączenia
SELECT * FROM user_mailboxes LEFT JOIN mbox ON mbox.id = user_mailboxes.message_id WHERE user_mailboxes.user = "$user" AND user_mailboxes.mailbox = "Out";
Będziesz potrzebował skryptu czyszczącego podczas usuwania, aby upewnić się, że nie ma osieroconych wiadomości, które nie istnieją w tabeli user_mailboxes.