1

私はMySQLテーブルを持っており、id最新parentcommentものから最も古いものへとほぼ同じように注文することができました。コメントに親がない場合、これは 0 に設定されます。

commentsテーブル:テーブルイメージ

これにより、私の現在のコード:

<?php

$con = mysqli_connect('host','username','password','database');

if (mysqli_connect_errno($con)) {
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$comments = array();
$results = mysqli_query($con,"SELECT * FROM comments ORDER BY id DESC");
while ($row = mysqli_fetch_assoc($results)) {
 $parent = $row['parent'];
 $comments[$parent ? $parent : 0][] = $row;                                        
}

function thread($parent,$comments) {
 foreach ($comments[$parent] as $post) {
  echo "<div>";
  echo $post['comment'];
  $id = $post['id'];
   if (isset($comments[$id])) {
    thread($id,$comments);
   }
  echo "</div>";
 }
}

thread(0,$comments);     

?>

上記の結果は次の順序になります(読みやすくするためにリストに変換します。コード内で div タグを li に変換し、foreach ループで ul タグをエコーすることでこれを行うことができます)

  • 3 番目のコメント
  • 2 番目のコメント
    • 2番目のコメントへの別の返信
      • そしてもう一つ
    • 2 番目のコメントに返信する
      • 返信に返信する
  • 最初のコメント
    • 最初のコメントに返信する

コメントと同様に、返信も降順で並べられていることに注意してください。それ以外は完全に問題なく、魅力的に機能しています。しかし、これは次のようなものです。

  • 3 番目のコメント
  • 2 番目のコメント
    • 2 番目のコメントに返信する
      • 返信に返信する
    • 2番目のコメントへの別の返信
      • そしてもう一つ
  • 最初のコメント
    • 最初のコメントに返信する

簡単に言うと、コメントは降順で、返信は昇順である必要があります。それは私が完全に行き詰まったところです。助けてくれてありがとう!!

4

1 に答える 1