2

PHP / MySQLアプリケーション用のスレッド化されたメッセージ表示(SlashdotやYoutubeのコメントなど)を設計していますが、コメントを並べ替えてページに分割し、たとえば1ページに20個のコメントを含めるにはどうすればよいか疑問に思っています。しかし、それでもそれらをネストします。

私のアプリのコメントは無制限のレベルでネストできます。この構造は、隣接関係テーブルであると私が信じているものを使用して表されます。これは、昇順/降順の関係を持つ各ペアの行を含む個別のテーブルです。その関係テーブルには、CHILDID、PARENTID、およびLEVELがあり、レベル2は「曽祖父母」などを意味します。

私の質問は、エンドユーザーにとっての使いやすさと、効率的なDBクエリを構築する実用性の両方の1つです。私はこれらのオプションを検討しました:

  • ツリー内の位置に関係なく、結果を日付ごとにページに分割します。これにより、特定の日付範囲内のすべてのコメントは、親と一緒に表示されなくても一緒に表示されます。親と同じ時間に投稿されたコメントはすべて同じページに表示され、その場合は「ネスト」して表示できますが、親から孤立したコメントがあります。これはおそらく許容範囲です-YouTubeのコメントで行われる方法です-親よりもはるかに遅れて作成されたコメントは、親と同じページに表示されません(親が最新のページにない場合)が、代わりに他の最新のコメント。

  • ツリーをトラバースするように、ノードを順番に取得します。これにより、日付よりもツリー構造が優先されますが、兄弟は日付で並べ替えることができます。これの利点は、親が最新のコメントからのページ数であっても、返信は常に親(返信するコメント)とともに配置されることです。これは、icanhascheezburgerブログなどのアプリで行われる方法です。誰もが最大の木の枝に返信を追加したくなるような方法のように、私はそれについていくつかのことが好きではありません。

  • 3番目のオプションは、Slashdotと同じように行うことです。この場合、コメントをページに分割しませんが、1つの大きなツリーがあります。ページサイズを管理しやすくするために、代わりに低評価のコメントのカリングを開始します。

最初のクエリは、リレーションテーブルを指定した場合の最も単純なDBクエリだと思いますが、他のアイデアを受け入れることができます。

3種類すべてのこのようなシステムの中には、何らかの方法でネストレベルを制限するものがあります。これは、Xレベルを繰り返した後、兄弟であるかのように他のすべてを組み合わせることができるため、簡単に実行できます。たとえば、YouTubeのコメントは1つのレベルにしかレンダリングされません。他のシステムでは、5レベル程度後に「ネストレベルを超えました」と表示されることがあります。

4

2 に答える 2

2

ネストされたコメントが必要な理由は、ユーザーが一度に1つの関心のあるスレッドを読みたいと思う傾向があるためだと思います。つまり、ユーザーが一貫した思考の連鎖のスレッドを作成すると信じる理由があります。また、1つのスレッドで議論されることは、一部のユーザーには関心があり、他のユーザーには関心がないということです。

その場合、日付ごとにスレッドをページ間で任意に分割したい理由がわかりません(オプション1)。評価の低いコメント(オプション3)をカリングする単一のページを使用することは少し厳しいように思われ、ユーザーがコメントを投稿するのを思いとどまらせる可能性があります。SlashDotのようなオーディエンスが多い場合、これは良いことかもしれませんが、より一般的な訪問率のサイトには望ましくない場合があります。

おそらく、オプション2のようなものを使用して、すべてのスレッドを同じページに置くことができますが、スレッドが長くなりすぎると、そのスレッド専用のページにユーザーを誘導する単一のリンクにロールアップされます。または、長いスレッドを減らして、件名と作成者だけを表示することもできます。各作成者は、スレッド専用ページの適切な場所にリンクします。

ユーザーが最大のスレッドに無関係なコメントを投稿する傾向は、ユーザーがスクロールしてスレッドの終わりを見つけたり、より適切なスレッドを見つけたりすることに煩わされたくないという結果であると思われます。長いスレッドを自動的に圧縮し、すべてのスレッドのルートを管理可能な長さの1ページに表示したままにすることで、ユーザーは目的のスレッドを簡単にスキャンして、必要に応じて追加できます。

于 2009-02-25T14:43:38.503 に答える
0

必要なのは、階層データをデータベースに格納することだと思います。次の記事から始めてください。 サイトポイント の記事 MySQL の Web サイトの記事

于 2009-02-24T19:10:52.177 に答える