Je pense que vous pouvez conserver votre structure de table actuelle pour le contenu du message. Plutôt que d'ajouter des colonnes séparées ou des drapeaux supprimés, vous feriez mieux d'avoir un tableau séparé pour les boîtes aux lettres.
Donc, votre table mbox actuelle :
id message sentby sentto created
Puis une autre table pour user_mailboxes
id user mailbox message_id
Vous auriez à faire trois insertions au total lors de l'écriture d'un message, une dans la table des messages, pour chaque utilisateur dans la table user_mailboxes.
Vos données mbox ressemblent donc à ceci :
id message sentby sentto created
1 Hi There UserA UserB 2015-01-26
2 Hello Back UserB UserA 2015-01-26
Et les données user_mailboxes ressembleraient à ceci :
id user mailbox message_id
1 UserA Out 1
2 UserB In 1
3 UserB Out 2
4 UserA In 2
Cela vous permet de supprimer des lignes individuelles pour la table user_mailboxes. Cela permettrait également de futurs add-ons en vous permettant d'envoyer des messages à plusieurs utilisateurs en même temps (une nouvelle ligne pour chaque utilisateur), et vous permettrait d'ajouter plus d'une boîte aux lettres si nécessaire (In, Out, Trash, Important , etc.).
Pour rechercher le courrier d'un utilisateur pour une boîte aux lettres particulière, il vous suffit d'utiliser une jointure
SELECT * FROM user_mailboxes LEFT JOIN mbox ON mbox.id = user_mailboxes.message_id WHERE user_mailboxes.user = "$user" AND user_mailboxes.mailbox = "Out";
Vous auriez besoin d'un script de nettoyage lors de la suppression pour vous assurer qu'il n'y a pas de messages orphelins qui n'existent pas dans la table user_mailboxes.