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

Thiết kế cơ sở dữ liệu cho nhận xét và trả lời

Bạn chỉ có thể sử dụng một bảng, trong đó có trường ParentID. Nếu bản ghi không có giá trị, nó là một nhận xét, nếu không nó là một câu trả lời (cho một nhận xét hoặc một câu trả lời).

Bạn có thể truy vấn bản ghi ParentID của bản ghi (kiểm tra đó là ParentID) để xem câu trả lời này là một nhận xét hay một câu trả lời.

Chỉnh sửa :Trên đây là một giải pháp khá thiết thực. Tuy nhiên, để đi với phiên bản chuẩn hóa, hãy vẫn giữ một bảng Nhận xét (không có ParentID) và tạo bảng ReplyTo có CommentID và ResponseID, cả hai đều là ID của các bản ghi trong bảng Nhận xét.

Sử dụng ý tưởng này, sql sau đây sẽ hiển thị các nhận xét và 'trả lời' cho mỗi nhận xét cho mỗi câu trả lời có nhận xét:

select c.comment, r.comment as reply
from comment as c, comment as r, replyto as rt
where c.ID = rt.CommentID
and r.ID = rt.ReplyID

Như Dimitrii đã chỉ ra, nó sẽ không hiển thị nhận xét không có câu trả lời - vì điều này, bạn cần một truy vấn kết hợp bên ngoài (không kiểm tra cú pháp):

SELECT c.comment, r.comment as reply,
from Comment c 
  left outer join Comment r on c.id = r.id  
  left outer join replyto rt on rt.responseid = r.id



  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 datetime mặc định thời gian với khoảng thời gian

  2. Nhận uuid được tạo sau khi chèn php

  3. Biến không xác định:pdo, gọi hàm thành viên chuẩn bị () trên null

  4. Tôi có thể sử dụng một câu lệnh được chuẩn bị sẵn bởi PDO để liên kết một số nhận dạng (một bảng hoặc tên trường) hoặc một từ khóa cú pháp không?

  5. MySQL Chọn các hàng có cột dấu thời gian từ bây giờ đến 10 phút trước