Penso che tu possa mantenere la tua attuale struttura della tabella per il contenuto del messaggio. Piuttosto che aggiungere colonne separate o flag eliminati, sarebbe meglio avere una tabella separata per le cassette postali.
Quindi la tua attuale tabella mbox:
id message sentby sentto created
Poi un'altra tabella per user_mailboxes
id user mailbox message_id
Dovresti eseguire tre inserimenti totali quando scrivi un messaggio, uno nella tabella dei messaggi, per ogni utente nella tabella user_mailboxes.
Quindi i tuoi dati mbox si presentano così:
id message sentby sentto created
1 Hi There UserA UserB 2015-01-26
2 Hello Back UserB UserA 2015-01-26
E i dati di user_mailboxes sarebbero simili a questo:
id user mailbox message_id
1 UserA Out 1
2 UserB In 1
3 UserB Out 2
4 UserA In 2
Ciò consente di eliminare singole righe per la tabella user_mailboxes. Ciò consentirebbe anche futuri componenti aggiuntivi consentendoti di inviare messaggi a più utenti contemporaneamente (una nuova riga per ogni utente) e di aggiungere più di una casella di posta se necessario (In, Out, Cestino, Importante , ecc).
Per cercare la posta di un utente per una particolare casella di posta, devi semplicemente utilizzare un join
SELECT * FROM user_mailboxes LEFT JOIN mbox ON mbox.id = user_mailboxes.message_id WHERE user_mailboxes.user = "$user" AND user_mailboxes.mailbox = "Out";
Avresti bisogno di uno script di pulizia durante l'eliminazione per assicurarti che non ci siano messaggi orfani che non esistono nella tabella user_mailboxes.