Tôi nghĩ bạn có thể giữ cấu trúc bảng hiện tại của mình cho nội dung thư. Thay vì thêm vào các cột riêng biệt hoặc các cờ đã xóa, bạn nên có một bảng riêng cho hộp thư.
Vì vậy, bảng mbox hiện tại của bạn:
id message sentby sentto created
Sau đó, một bảng khác cho user_mailboxes
id user mailbox message_id
Bạn sẽ phải thực hiện tổng cộng ba lần chèn khi viết một tin nhắn, một lần vào bảng tin nhắn, bật cho mỗi người dùng trong bảng user_mailboxes.
Vì vậy, dữ liệu mbox của bạn trông giống như sau:
id message sentby sentto created
1 Hi There UserA UserB 2015-01-26
2 Hello Back UserB UserA 2015-01-26
Và dữ liệu user_mailboxes sẽ giống như sau:
id user mailbox message_id
1 UserA Out 1
2 UserB In 1
3 UserB Out 2
4 UserA In 2
Điều này cho phép bạn xóa các hàng riêng lẻ cho bảng user_mailboxes. Điều này cũng sẽ cho phép các tiện ích bổ sung trong tương lai bằng cách cho phép bạn gửi thư cho nhiều người dùng cùng một lúc (Một hàng mới cho mỗi người dùng) và cho phép bạn thêm nhiều hộp thư nếu cần (Vào, Ra, Thùng rác, Quan trọng , v.v.).
Để tra cứu thư của một người dùng cho một hộp thư cụ thể, bạn chỉ cần sử dụng một phép nối
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ạn sẽ cần một tập lệnh dọn dẹp khi xóa để đảm bảo không có thư nào không có trong bảng user_mailboxes.