0

私は、ユーザーが他の人の壁に投稿でき、その壁の投稿に返信したり、新しい壁の投稿を投稿したりできる、シンプルな「Facebookウォール」タイプの機能を書いています。ユーザーは返信に返信できません。元のウォール投稿にのみ返信できます(Facebookのように)

私が考えていた元のmySQLデータベーススキーマは次のようになります。

post_id(pk)
post_text(char)
date_posted(日時)
is_parent(bool)
parent_id(親のID)

仕組み:
誰かが新しいウォールポストを投稿した場合、is_parentは1に設定され、parent_idはnullに設定されます。

誰かがその投稿に返信を投稿した場合、is_parentは0になり、parent_idは親投稿のIDに設定されます。

私の質問

  1. これはこの機能に適したスキーマですか?そうでない場合、どのスキーマを使用しますか?
  2. 良い場合は、子を親とグループ化しながら、すべてのウォール投稿を最近投稿された順に返す単一のクエリを実行して、クエリ結果を反復処理したときに親と子がすべて一緒になるようにするにはどうすればよいですか? 。
  3. それとも、2つのクエリを実行する方が良いですか?すべての親に対して1つのクエリ、子に対して1つのクエリ。
4

2 に答える 2

1

初めに。同じ目的で2つのフィールドは必要ないと思います。この場合、parent_idで十分です。post_idがauto-increamentを設定している場合。最初に割り当てられる値は1になるため、parent_id=0は発生しません。parent_id = 0の場合、それは第1レベルの投稿であると見なすことができます。

すべての返信に1つのクエリを使用することをお勧めします。

于 2009-11-25T02:27:24.310 に答える
0
  1. わからない/おそらく。is_parent列を失います。
  2. 私は最近、post_idの昇順でソートされたすべての投稿を照会することによってこれを行いました。次に、PHPを使用して2D配列にキャッシュしました(array ['parrent']-> array ['post'] ... [])。
  3. #2で説明した方法でそれを行う必要があります
于 2009-11-25T03:02:55.593 に答える