Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL中加入“blog”表和“comments”表_Php_Mysql_Join_Mysqli_Union - Fatal编程技术网

Php 在MySQL中加入“blog”表和“comments”表

Php 在MySQL中加入“blog”表和“comments”表,php,mysql,join,mysqli,union,Php,Mysql,Join,Mysqli,Union,我有两个单独的表,第一个是“blogs”,它显然包含已发布的blog。第二个表是“b_comments”,其中包含博客上发布的所有评论。每个博客都有一个唯一的ID,它与每个评论一起存储 到目前为止,我使用两个单独的查询来获取完整的博客文章和所有的评论。有没有一种方法可以将这两个表连接在一起,从而在一个查询中获得整个博客文章和所有评论 我从未使用过MySQL的JOIN或UNION函数,因此我不确定这是否可行 以下是我的两个问题(如果有帮助的话): $getBlog = $link->quer

我有两个单独的表,第一个是“blogs”,它显然包含已发布的blog。第二个表是“b_comments”,其中包含博客上发布的所有评论。每个博客都有一个唯一的ID,它与每个评论一起存储

到目前为止,我使用两个单独的查询来获取完整的博客文章和所有的评论。有没有一种方法可以将这两个表连接在一起,从而在一个查询中获得整个博客文章和所有评论

我从未使用过MySQL的JOIN或UNION函数,因此我不确定这是否可行

以下是我的两个问题(如果有帮助的话):

$getBlog = $link->query("SELECT * FROM blogs WHERE blog_id = '" .$blogID. "'");

$getComments = $link->query("SELECT * FROM b_comments WHERE blog_id = '".$blogID."' ORDER BY date DESC")
编辑:以下是更多代码,可帮助您更好地理解我正在尝试执行的操作:


使用这些变量,我将数据回送到HTML页面。

在不知道表结构的情况下,您可以尝试以下操作:

SELECT *
FROM blogs
JOIN b_comments ON blogs.blog_id = b_comments.blog_id
如果要返回没有评论的博客,可能需要使用左连接

更新

您可以执行左连接以获取博客文章和评论,如果没有评论,则仅获取博客文章:

$getBlogAndComments = $link->query("SELECT * FROM blogs b 
                              LEFT JOIN b_comments ON b.blog_id = c.blog_id 
                              WHERE b.blog_id = '" .$blogID. "'");

虽然在本例中,两个查询可能更有效,因为您将获取博客文章以及每个评论行。

好的,那么我如何使用这一查询,并将博客作者、图像、发布日期、id和内容放入变量中,同时将评论id、作者、内容和博客id放入变量中?对于我使用mysqli_fetch_assock的两个查询,我不知道您想做什么或上下文,我真的无法为您猜测。我用更多代码和进一步解释更新了我的问题。如果可以,请帮助。@TyBailey我已经更新了你的代码。看看它是否有效。我真的不认为合并这两个查询是明智的,因为它们并不完全相关。不,我很抱歉它不起作用。谢谢你的尝试。我会把查询分开。你认为如果我只使用两个查询会更好吗?
//get blog posts
$blogID = intval($_GET['id']);

$blogTitle = null;
$pubDate = null
$blogCat = null;
$blogAuthor = null;
$blogImage = null;
$blogContent = null;

//get comments
$getComments = $link->query("SELECT a.blog_title, a.pub_date, a.category, a.author, a.image, a.content AS blog_content, b.id, b.user_name, b.date, b.content FROM blogs a JOIN b_comments b ON a.blog_id = b.blog_id WHERE a.blog_id = " . $blogID . " ORDER BY b.date DESC");

if(!($getComments->num_rows > 0)) {
    echo "<div id='commentArea' style='display: none;'>";

    echo "</div>";
} else {
    while($comRow = mysqli_fetch_assoc($getComments)) {
    if(empty($blogTitle)) $blogTitle = $link->real_escape_string($row['blog_title']);
    if(empty($pubDate)) $pubDate = $link->real_escape_string($row['pub_date']);
    if(empty($blogCat)) $blogCat = $link->real_escape_string($row['category']);
    if(empty($blogAuthor)) $blogAuthor = $link->real_escape_string($row['author']);
    if(empty($blogImage)) $blogImage = $link->real_escape_string($row['image']);
    if(empty($blogContent)) $blogContent = $link->real_escape_string($row['blog_content']);

    $commentID = $link->real_escape_string($comRow['id']);
    $comAuthor = $link->real_escape_string($comRow['user_name']);
    $comDate = $link->real_escape_string($comRow['date']);
    $comContent = $link->real_escape_string($comRow['content']);
    $comDate = date("F jS, Y H:ia", strtotime($comDate));
    }
}
$getBlogAndComments = $link->query("SELECT * FROM blogs b 
                              LEFT JOIN b_comments ON b.blog_id = c.blog_id 
                              WHERE b.blog_id = '" .$blogID. "'");