Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hệ thống nhắn tin trong php mysql

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL FULL JOIN không hoạt động nhưng tham gia RIGHT và LEFT hoạt động

  2. Cảnh báo PHP:mysqli_connect ():(HY000 / 2002):Kết nối bị từ chối

  3. Cách chèn các cột đã chọn từ tệp CSV vào cơ sở dữ liệu MySQL bằng TẢI THÔNG TIN DỮ LIỆU

  4. Làm cách nào để quyết định khi nào sử dụng liên kết phải / liên kết trái hoặc liên kết bên trong Hoặc làm thế nào để xác định bảng nào nằm ở phía nào?

  5. Giới hạn kết nối cho Google Cloud SQL từ App Engine là gì và cách sử dụng lại các kết nối DB tốt nhất?