我经常读到mysql(i)在while循环中使用的查询实际上并不是性能友好的,我会重写我的代码,因为我认为它会变得更好。但是,这是我的问题,如果JOIN可以在这里工作。它是一个单一的帖子查看功能,但您应该看到下面发布的每条评论。我在帖子打印的循环中得到了评论循环。
<?php
$result = (empty($_GET['hash'])) ? $_GET['hash'] = '' : mysqli_query($conn, "SELECT * FROM `userposts` WHERE `hash`='".$_GET['hash']."' LIMIT 1");
while($rows = mysqli_fetch_array($result)){
//Output of single post
$commentresult = mysqli_query($conn, "SELECT * FROM `comments` WHERE `postid`='".$rows['id']."'");
while($commentrows = mysqli_fetch_array($commentresult)){
//Output of all comments
}
}
所以我认为它变得更好但是JOIN的查询应该是:
$result = (empty($_GET['hash'])) ? $_GET['hash'] = '' : mysqli_query($conn, "SELECT * FROM `userposts` JOIN comments ON userposts.id = comments.postid WHERE `hash`='".$_GET['hash']."' LIMIT 1");
但是,如果我试图在while循环中发布评论数据,那就是单打印件,它只打印一条评论。那我该怎么办?
问候
答案 0 :(得分:0)
你的代码有点混乱。你有时用字符串调用mysql_fetch_results,这很奇怪。
你想要的是这个:
"SELECT * FROM comments LEFT JOIN userposts ON comments.PostID = userposts.ID WHERE userposts.Hash = '$_GET['hash']'"
编辑:对不起,你想要LEFT JOIN左边有评论。给你所有的评论
编辑2:我设置了它并且它按预期工作,即使有多个帖子具有相同的哈希值。
<?php
$hash = $_GET['hash'];
$result = mysqli_query($conn, "SELECT * FROM comments LEFT JOIN userposts ON comments.PostID = userposts.ID WHERE userposts.Hash = '$hash'");
if ( $row = mysql_fetch_array($result)) {
// output of post.
// output first comment
}
while($row = mysqli_fetch_array($result)){
//Output other comments
}
?>