16

1 つはコメント付き、もう 1 つは返信付きの 2 つのテーブルを作成し、それらの間に 1 対多の関係を持たせたいと考えています。しかし、返信にも返信できる場合はどうすればよいでしょうか。これは私が 1 対多用に持っているものですが、返信用の返信もある場合、どのように見えるべきかわかりません。

    Comments:
•   Id
•   Title
•   Text

    Replies:
•   Id
•   Title
•   Text
•   Comment id

前もって感謝します。

4

2 に答える 2

25

ParentID フィールドを含む 1 つのテーブルのみを使用できます。レコードに値がない場合はコメントであり、そうでない場合は返信 (コメントまたは返信のいずれか) です。

レコードの ParentID レコードをクエリして (ParentIDであることを調べます)、この返信がコメントに対するものか返信に対するものかを確認できます。

編集:上記はかなり実用的な解決策です。ただし、正規化されたバージョンを使用するには、1 つの Comments テーブル (ParentID なし) を保持し、CommentID と ResponseID を持つ ReplyTo テーブルを作成します。どちらも Comments テーブル内のレコードの ID です。

このアイデアを使用して、次の sql は、コメントを含む各返信について、コメントと各コメントへの「返信」を表示します。

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

Dimitrii が指摘しているように、返信のないコメントは表示されません。そのためには、外部結合クエリが必要です (構文はテストしていません)。

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
于 2012-11-21T10:01:29.330 に答える