首先看看这个例子,我想让它看起来是什么样子,
登录
电子邮件:aa@aa.aa密码:aaaaaa
进入这个页面http://www.nomomon.com/forums.php?email=aa@aa.aa&v=21828
你看到回复是如何彼此缩进的,这就是我想要的样子,现在我的努力;
首先,我有一切设置和一个工作留言板,只是不显示帖子回复正确,每个帖子有一个父帖子ID等…
这是我的尝试,它适用于第一个回复,但不像给定的例子迭代每个帖子回复与正确的parentID?
while ($post = $q -> fetch(PDO::FETCH_ASSOC)) {
echo '<p class="spacerTop"><a href="http://www.example.com/boards?topic=' . $_GET['topic'] . '&view=' . $post['postID'] . '">' . $post['subject'] . '</a> - <a href="http://www.example.com/viewaccount?id=' . $post['posterID'] . '">' . $post['username'] . '</a></p>';
$q = $dbc -> prepare("SELECT boardposts.*, accounts.username FROM boardposts INNER JOIN accounts WHERE boardposts.posterID = accounts.id AND boardposts.parentID = ?");
$q -> execute(array($post['postID']));
while ($post2 = $q -> fetch(PDO::FETCH_ASSOC)) {
echo '<p class="spacerTop" style="margin: 0 0 0 20px;"><a href="http://www.example.com/boards?topic=' . $_GET['topic'] . '&view=' . $post2['postID'] . '">' . $post2['subject'] . '</a> - <a href="http://www.example.com/viewaccount?id=' . $post2['posterID'] . '">' . $post2['username'] . '</a></p>';
$q = $dbc -> prepare("SELECT boardposts.*, accounts.username FROM boardposts INNER JOIN accounts WHERE boardposts.posterID = accounts.id AND boardposts.parentID = ?");
$q -> execute(array($post2['postID']));
while ($post3 = $q -> fetch(PDO::FETCH_ASSOC)) {
echo '<p class="spacerTop" style="margin: 0 0 0 40px;"><a href="http://www.example.com/boards?topic=' . $_GET['topic'] . '&view=' . $post3['postID'] . '">' . $post3['subject'] . '</a> - <a href="http://www.example.com/viewaccount?id=' . $post3['posterID'] . '">' . $post3['username'] . '</a></p>';
}
}
}
我的第一个想法是显示每个帖子与父ID,然后另一个while循环为这些回复,最后另一个while循环,但它不工作的方式,我想要的,因为它只显示第一个回复的回复。
首先,您最终将不得不重新考虑该函数(除非您只想显示最多3个响应)。用递归的方式来解决这个问题是很诱人的(因为递归很适合解决这类问题),但是有一种不需要递归的方法也可以做到这一点。无论如何,现在这是出路,为什么它不能正常工作。你的代码似乎是健全的,但你确定SQL查询返回正确的结果?您是否尝试过不使用PHP,仅通过执行查询并查看结果?我也不完全确定是否需要INNER JOIN。
SELECT `postID`, `topic`, `subject`, `posterID`,`username`, `id`
FROM `boardposts`, `account`
WHERE `boardposts`.`posterID` = `accounts`.`id` AND `boardposts`.`parentID` = ?
我不记得了,但是你可能不得不在select子句中使用表名(就像你现在所做的那样),尽管我觉得它们可能是可选的。无论如何,首先要确保您的查询返回正确的结果。