SQL JOIN语句没有输出正确的数据


SQL JOIN statement not outputting correct data

我有一个问题与我的SQL化妆或我的查询。我正在建立一个评论系统,我有两个数据库。我试图JOIN数据库,并有查询工作正常。

我要做的是从profile_img中获得与两个表中的user_id相关联的img。但是,我只希望显示来自用户的最后一张图像(在profile_img数据库中)。当我上传个人资料图像时,它们只是简单地添加,我只输出最后上传的一个。

我使用的数据库是:

home_comments:

id, user_id, username, comment, date

profile_img结构:

id, user_id, img

我原来的SQL是这个

$select_comments_sql = "
    SELECT c. *,
    p.user_id, p.img
    FROM home_comments AS c
    INNER JOIN profile_img AS p
    WHERE c.user_id = p.user_id
    ORDER BY id DESC
";

这个原始的SELECT SQL工作与我的查询,这是:

if ($select_comments_stmt = $con->prepare($select_comments_sql)) {
        //$select_comments_stmt->bind_param("s", $user_id);
        $select_comments_stmt->execute();
        if (!$select_comments_stmt->errno) {
            //echo "error";
        }
        $select_comments_stmt->bind_result($comment_id, $comment_user_id, $comment_username, $home_comments, $comment_date, $commenter_user_id, $commenter_img);
    //var_dump($select_comments_stmt);  
        $comment_array = array();
        while ($select_comments_stmt->fetch()) {
            $comment_array[] = $comment_user_id;
            $comment_array[] = $comment_username;
            $comment_array[] = $home_comments;
            $comment_array[] = $comment_date;
            $comment_array[] = $commenter_user_id;
            $comment_array[] = $commenter_img;
            $commenter_img = '<img class="home-comment-profile-pic" src=" '.$commenter_img.'">';
            if ($home_comments === NULL) {
                echo 'No comments found.';
            } else {
                echo '<div class="comment-post-box">';
                echo $commenter_img;
                echo '<div class="comment-post-username">'.$comment_username. '</div>';
                echo '<div class="comment-post-text">'.$home_comments. '</div>';
                echo '</div>';
            }
        }
  }

这会为用户的评论生成用户的个人资料图片,但是,它会为用户的每个个人资料图片生成重复的评论。

我现在,有这个新的SQL尝试解决这个问题(它显示它在SQL小提琴中工作),但它没有输出:

$select_comments_sql = "
    SELECT c. *, p.user_id, p.img
    FROM home_comments AS c
    INNER JOIN (SELECT max(id) as id, user_id 
                FROM profile_img 
                GROUP BY user_id) PI
      on PI.user_id = C.user_id
    INNER JOIN profile_img p
      on PI.user_id = p.user_id
     and PI.id = P.id
    ORDER BY C.id DESC
";

那么,我准备的语句/输出是否有问题,或者新的SQL SELECT语句不正确?

有人看到这是什么问题吗?如果您有任何问题,请告诉我。

对于我留下的注释:

"案件敏感性做到了!谢谢!请随意留下答案。快速问题虽然-基于我的查询方式布局,我怎么能添加错误报告给它?我正试图写与PDO,所以不知道如何做到这一点。贝基"

别名是区分大小写的,因此您需要将查询更改为:

$select_comments_sql = "
        SELECT c. *, p.user_id, p.img
        FROM home_comments AS c
        INNER JOIN (SELECT max(id) as id, user_id 
                    FROM profile_img 
                    GROUP BY user_id) PI
          on PI.user_id = c.user_id
        INNER JOIN profile_img p
          on PI.user_id = p.user_id
         and PI.id = p.id
        ORDER BY c.id DESC
    ";
  • 默认情况下,表别名在Unix上是区分大小写的,但在Windows或OS上不是这样

在查询上使用异常/错误处理会发出错误信号。

  • http://php.net/manual/en/pdo.error-handling.php