わかりました、コメントを達成する方法はたくさんあると思います。私が選んだ方法は、このように設定された単一のテーブルです。
id comment date time orig_comment
1 Hello 03-01-2013 10:10:10 0
2 Hello 03-02-2013 10:10:10 0
3 Hello 03-03-2013 10:10:10 1
したがって、最初のレベルがあることを明確にするために、ユーザーはそのコメントに返信できます(これらは2つのレベルのみです)。それぞれに一意の増分IDを指定し、orig_commentを指定します。orig_commentが「0」の場合は基本レベルのコメントであり、ネストされている場合はorig_commentが元のコメントのIDになります。十分に単純です。ですからもちろんコメントを注文する必要があります。これが私が今のところこれを行う方法です。
mysql_query("SELECT Comments.* FROM Comments ORDER BY
IF(Comments.orig_comment = 0, Comments.id, Comments.orig_comment)DESC,Comments.id ASC")
これは、最新のコメントを最初に取得するように機能しますが(これは私が望むものです)、ネストされたコメントに関しては、最も古いものから順に並べ替えます(必要なものではありません)。プライマリコメントは新しいものから古いものの順に並べる必要があり、返信も新しいものから古いものの順に並べる必要があります。これを行うためにクエリを変更しようとしましたが、理解できません。
副次的な質問として、このシステムは、使いやすさの観点から意味がありますか?ネストされたコメントをそのように並べ替えると混乱すると思いますか?返信ボタンがベースコメントにあり、クリックするとベースコメントのすぐ下にテキストエリアが追加されるため、この方法でやりたかったのです。ネストされた返信の一番下までスローされるのではなく、基本コメントのすぐ下に投稿が表示された方が見やすいと思いました。これについて何か考えはありますか?
また、コメントをページングするためにこれを使用している別の質問に対処したいと思います。単純な制限を使用して、次のようなx個のコメントのみを取得できます。
mysql_query("SELECT Comments.* FROM Comments ORDER BY
IF(Comments.orig_comment = 0, Comments.id, Comments.orig_comment)DESC,Comments.id ASC
LIMIT 0, $page")
この方法では、明らかに各メインコメントへの返信数に注意を払っていません。だから私は最後のメインコメントへの返信を断ち切ることになります。orig_comment = '0'の場合にのみ制限を適用したいので、コメントへの返信がいくつあっても、すべてが表示されます。私は試した
mysql_query("SELECT Comments.* FROM Comments ORDER BY
IF(Comments.orig_comment = 0, Comments.id, Comments.orig_comment)DESC,Comments.id ASC
LIMIT 0, SELECT COUNT(id)FROM Comments WHERE orig_comment='0' LIMIT $page")
ただし、これは構文エラーをスローします。