我需要使用PHP和MYsql向我的网站添加“评论回复”功能。 我有这3个数据库:
PAGE ╔═════════╦══════════╗ ║ id ║ content ║ ╠═════════╬══════════╣ ║ 1 ║ text ║ ║ 2 ║ text ║ ║ 3 ║ text ║ ╚═════════╩══════════╝
USER ╔═════════╦══════════╗ ║ id ║ name ║ ╠═════════╬══════════╣ ║ 1 ║ name ║ ║ 2 ║ name ║ ║ 3 ║ name ║ ╚═════════╩══════════╝
COMMENTS ╔═════════╦══════════╦═══════════╦══════════╗ ║ id ║ user_id ║ page_id ║ content ║ ╠═════════╬══════════╬═══════════╬══════════╣ ║ 1 ║ 1 ║ 1 ║ text ║ ║ 2 ║ 2 ║ 1 ║ text ║ ║ 3 ║ 2 ║ 2 ║ text ║ ╚═════════╩══════════╩═══════════╩══════════╝
我用简单的查询填充各种页面(page.php?page = 1有不同的内容来自page.php?page = 2):
$content = $db->prepare("
SELECT
p.id AS page_id,
p.content AS content
FROM `page_content` AS p
WHERE p.id = :id
");
$content->BindValue(':id', $_GET['page']);
$content->execute();
$content = $content->fetchAll(PDO::FETCH_ASSOC);
然后显示带有“echo”的结果:
<p><?php echo $content[0]['content']; ?></p>
为了显示相对页面的注释,我准备并执行以下查询:
$comments = $db->prepare("
SELECT
c.id AS comment_id,
c.user_id AS user_id,
c.page_id AS page_id,
c.content AS comment_content,
u.id AS user_id,
u.name AS user_name
FROM `comments` AS c
LEFT JOIN `users` AS u
ON u.id = c.user_id
WHERE c.page_id = :id
");
$comments->BindValue(':id', $_GET['page']);
$comments->execute();
$comments = $comments->fetchAll(PDO::FETCH_ASSOC);
现在,只需使用“foreach”,我就可以在页面底部看到所有相关评论和作者内容:
foreach ($comments as $value) {
echo '<h4>' . $value['user_name'] . '</h4>' ;
echo $value['comment_content'] . '<br/><br/>' ;
}
现在我需要添加评论的回复,作者也是如此。 我构建了以下数据库:
REPLIES TO COMMENTS ╔═════════╦══════════════╦═══════════╦══════════╗ ║ id ║ is_reply_to ║ user_id ║ content ║ ╠═════════╬══════════════╬═══════════╬══════════╣ ║ 1 ║ 3 ║ 1 ║ text ║ ║ 2 ║ 2 ║ 1 ║ text ║ ║ 3 ║ 2 ║ 2 ║ text ║ ╚═════════╩══════════════╩═══════════╩══════════╝
从这里,我不能去看看我的“网络应用程序”并完成它。 我不知道如何调用查询,也不知道如何按正确的嵌套顺序对结果进行分组(下一条评论只有在上一条评论的回复列表完成后才出现在列表中 - 当然还有回复)。 我只需要一个级别的评论回复。对“回复回复”不感兴趣。
尝试了其他解决方案,我找到了其他解答,但似乎没有一个对我有用。