Mysql
 sql >> Database >  >> RDS >> Mysql

Sistema di messaggistica in php mysql

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.