在PHP/MySQL中连接两个表,并在一个表的数据为空而另一个表的数据不为空时显示两个表的元素。

6 浏览
0 Comments

在PHP/MySQL中连接两个表,并在一个表的数据为空而另一个表的数据不为空时显示两个表的元素。

我有两个表,一个包含了发布到博客页面的文章,第二个表包含了对这些文章的评论。

我正在使用下面的函数来连接它们并显示两个表中的数据。

function list_articles() { 
    include('core/db/db_connection.php');
    $sql = "SELECT blog.title, blog.content, blog.posted_by, blog.date, article_comments.comments, article_comments.comment_by
                FROM blog INNER JOIN article_comments
                ON blog.content_id = article_comments.comment_id
                -- WHERE blog.content != '' AND article_comments.comment_id != ''
                ORDER BY blog.content_id DESC";
    $result = mysqli_query($dbCon, $sql);
    while ($row = mysqli_fetch_array($result)) {
        echo 
            "
Posted by " . $posted_by = $row['posted_by'] . " on " . $row['date'] . "
" . "

" . $title = $row['title'] . "

" . "
" . $content = $row['content'] . "
" . "
" . "" . $row['comment_by'] . "" . "" . $row['comments'] . ""; } }

我遇到的问题是,当用户插入一篇新博客文章时,它不会显示在网页上。如果我在另一个表中插入了一条评论(通过ID匹配),那么这篇文章就会正常显示。如何在没有与其关联的评论的情况下显示这些文章?

我尝试过`-- WHERE blog.content != '' AND article_comments.comment_id = '' OR article_comments.comment_ID = ''`,但没有效果。

此外,请问是否有更好的方式来定位这些文章,而不是通过ID?

0
0 Comments

问题的原因是在使用INNER JOIN时,只会显示两个表中有匹配记录的行,而不会显示其中一个表中数据为空的行。解决方法是将INNER JOIN替换为LEFT OUTER JOIN,这样就可以显示第一个表中的所有记录,并且如果第二个表中有匹配的记录,则也会将其加入结果中。

另外,文章中还提到了一个问题,即如何将表A的column_id与表B的column_id进行关联。例如,如果表A的column_id值为6,则表B的column_id不应该允许输入大于column_id A的值。

为了解决这个问题,可以在查询中添加一个条件,使用WHERE子句来限制表B中的column_id值不能大于表A中的column_id值。

完整代码如下:

SELECT *
FROM tableA
LEFT OUTER JOIN tableB ON tableA.column_id = tableB.column_id
WHERE tableA.column_id >= tableB.column_id

这样就可以实现根据column_id的值将两个表进行关联,并且限制了表B中的column_id不大于表A中的column_id的值。

0