0

stackoverflowのコメントシステムと同じように、phpで1レベルだけ深いコメントシステムを作りたいです。

次のフィールドを持つコメントテーブルを作成しました

  comment_id int(11) (PRIMARY KEY)
  parent_id int(11)
  thread_id int(11) (FOREIGN KEY)
  title varchar(400)
  body varchar(400)
  date_comment timestamp 
  user_name varchar(100)

このクエリで親コメントを取得しています

SELECT * FROM comments WHERE thread_id = {$thread_id} 
AND parent_id IS NULL

しかし、最初に親コメントが来て、次にすべての子コメントが来るという順序で、すべての子コメントも取得する必要があります..(Stackoverflowコメントシステムと同じように)

なにか提案を??

4

3 に答える 3

2

特別なキーがないと、すべてのデータを注文することはできません。

最も簡単な方法は、すべてのコメントとスレッドを選択することです:

SELECT
 * 
FROM
 comments 
WHERE
 thread_id = {$thread_id} 

結果配列で簡単な操作を行います。

$array = array();
foreach($result as $row)
{
    if(!$row['thread_id']){
        $array[$row['id']]=array();
        $array[$row['id']]['DATA'] = $row;
        continue;
    }

    $array[$row['id']][$row['id']] = $row;
}

次のような配列があります。

Array(
  /*thread==>*/          [11] => Array(
      /*thread data==>*/   [DATA] => Array(/*with thread data*/)
      /*comment==>*/       [12] => Array(/*with data*/)
      /*comment==>*/       [13] => Array(/*with data*/)
  )
) 
于 2013-04-10T12:09:12.623 に答える
0

コメントテーブルにコメントのみを記録すると仮定すると...

スレッドのすべてのコメントを取得するには、次のような SQL クエリを使用します。

select * from comments where thread_id = 'yourthread_id'

q&aを親とします。

スレッドと親 IDを含むコメントをテーブルに書き込み、 それらが属する場所を記録する必要があります。

記録中に null のままにしないでください。

そう:

$query  = "select * from comments where thread_id = '$threadId'";
$result = mysqli_query($query);
if(!$result){
   echo('Failure : '.mysqli_errno());
   exit(0);
}
$comments = [];
while(true){
    $row = mysqli_fetch_assoc($result);
    if(!$row)break;
    $comments[] = $row;
}

これで、そのスレッドに属するコメントで満たされた $comments 配列ができました。

すべての要素には、データベース レコードの構造があります。

 $comment[0]['comment_id'] etc...

その配列をトラバースすることで、parent_id を介して各コメントを適切な親に収集し、タイムスタンプを介してそれらのエントリ順序を検出できます...これは配列操作であり、簡単に実行できると思います。

于 2013-04-10T11:41:01.763 に答える
0
<?php 

$a = mysql_query("Select * From comments where thread_id = {$thread_id} AND parent_id IS NULL");

while($row= mysql_fetch_array($a)) {
  $b = mysql_query("Select * From comments, where thread_id = ($thread_id} AND parent_id = " . $row['comment_id'] .";");
  while($row2 = mysql_fetch_array($b) {
}
}
于 2013-04-10T11:50:25.950 に答える