使用JOIN用一个查询替换while循环中的mysqli查询

时间:2014-09-10 15:45:50

标签: php mysqli

我经常读到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循环中发布评论数据,那就是单打印件,它只打印一条评论。那我该怎么办?

问候

1 个答案:

答案 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
}
?>