我有一個評論系統。每條評論可能會收到回覆,每個回覆可能會收到回覆,令人生厭。循環嵌套
因此,我的數據庫中包含名爲「意見」具有以下重要領域表:
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>";
但如果我正確地複製了我的代碼的本質,問題是這樣的:在回覆第一個回覆後,它回到第一個回覆的第一個回覆,然後是第一個回覆的第一個回覆的第一個回覆,但是循環從來沒有得到任何東西的第二個答覆。因此,例如,假設表有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
如果沒有其他的東西,去睡覺,並且在你醒來後的幾個小時不要考慮代碼。如果你一整天都對你這麼做,**會離開一段時間。** –
在循環中打一個數據庫也不是一個好主意。 id在1個查詢中獲取所有相關注釋,然後嘗試使用循環/遞歸顯示它們。 –