私はコメントシステムを持っています。それぞれのコメントは返信を受け取ることがあり、各返信は広告の嫌がらせである返信を受け取ることがあります。入れ子のwhileループ
このように、私のデータベースは、以下の重要なフィールドと「コメント」という名前のテーブルが含まれます。
id
text
reply_to
を... REPLY_TOの下で、もちろん、それが回答されているコメントのIDを行きます。
これで問題は簡単です:すべてのコメントを表示するにはどうすればよいですか?各コメントの後に返信する必要があり、各返信後に返信などが必要になることを知っていますか?
$query = mysql_query("SELECT * FROM comments WHERE reply_to=0");
while ($comment = mysql_fetch_array($query))
include("comment.php");
そしてcomment.phpで、私が持っていることは次のとおりです:
foreach ($comment as $key = $value) $$key = $value;
echo $text;
echo "<div style='margin-left:30px;'>"; //A margin for a little indent
$subquery = mysql_query("SELECT * FROM comments WHERE reply_to=$id");
while ($comment = mysql_fetch_array($subquery))
include("comment.php");
echo "</div>";
でもあれば、私はほとんど、と私はで帰ってくるが、このようなもので試してみました何
私は自分のコードの本質を正しく再現しました。問題はこれです。最初の返信がエコーされた後、最初の返信の最初の返信に続き、最初の返信の最初の返信が続きますが、ループは何の2番目の返事に決して行きません。したがって、たとえば、テーブルを想定すると、3件の返信を持っていたそれぞれの3件のコメントを、持っていた、と3件の回答、などを持っていたそれぞれの、上記のコード出力は次のようになります
Comment
First reply
First second-order reply
First third-order reply
...
私ははっきりと十分にそれを説明している願っています。 inb4:テーブルに新しい列を追加することはできません。擬似コードで
コードを関数にパックし、再帰的にする必要があります。 http://stackoverflow.com/questions/2648968/what-is-a-recursive-function-in-php – mario
他に何もなければ、起床してから数時間コードについて考えないでください。あなたがこの一日中、あなたの頭を叩いてしまったのなら、しばらくの間、** away away。** –
ループでデータベースを打つことも良い考えではありません。 idは1つのクエリですべての関連するコメントを取得し、ループ/再帰を使用してそれらを表示して表示します。 –