Mysql
 sql >> Base de données >  >> RDS >> Mysql

Système de messagerie en php mysql

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.