【问题标题】:PHP SQL query issuePHP SQL查询问题
【发布时间】:2011-07-29 08:58:59
【问题描述】:

我有一个系统,它收集用户关注的所有人并获取这些人的个人资料图片,然后将它们显示在网页上,但是如果用户关注 3 个人,则第一次查询将循环 3 次找到追随者,然后尝试使用第一个追随者图像显示每个追随者。为每个用户完成此操作后,查询将继续对第二个关注者执行相同操作,然后是每个后续关注者。

所以基本上网页看起来像, [正确的用户 1 的名称和图像] [正确的名称和用户 2 的错误图像] [正确的名称和用户 3 的错误图像]

[为用户 1 正确的名称和错误的图像] [为用户 2 正确的名称和图像] [为用户 3 正确的名称和错误的图像]

依此类推,具体取决于用户关注的人数。我觉得我可能解释的不是很好,如果不是请说,我会重写

这是我正在使用的代码

$sql_friends = "SELECT `first_name`, `surname`, `username` FROM users JOIN followers ON followers.friend_id = users.user_id WHERE followers.user_id = '$user_session_id'";
            $result_friends = mysql_query($sql_friends);
            while($row = mysql_fetch_array($result_friends)){
                $friendforename = $row['first_name'];
                $friendsurname = $row['surname'];
                $friendusername = $row['username'];
                $sql_img = "SELECT `img` FROM followers JOIN user_profile ON followers.friend_id = user_profile.user_id WHERE followers.user_id = '$user_session_id'";
                $result_img = mysql_query($sql_img);
                while($img_row = mysql_fetch_assoc($result_img)){
                    $friend_image = $img_row['img'];
                    echo "<a href=\"$friendusername/\"><img src=\"../{$friendusername}/{$friend_image}\" title=\"{$friendforename} {$friendsurname}\"/></a>";
                }
            }

【问题讨论】:

  • 撇开:假设followers.user_id 是一个整数字段,您不需要在变量周围加上引号。你可以做 follower.user_id = $user_session_id

标签: php sql while-loop


【解决方案1】:

您不需要两个不同的查询来实现这一点。(我假设 user_profile 表中每个用户只能有一条记录)。

试试下面的代码:

 $sql_friends = "SELECT `first_name`, `surname`, `username`, `img` FROM users JOIN followers ON followers.friend_id = users.user_id LEFT JOIN user_profile ON followers.friend_id = user_profile.user_id WHERE followers.user_id = '$user_session_id'";
    $result_friends = mysql_query($sql_friends);
    while($row = mysql_fetch_array($result_friends)){
        $friendforename = $row['first_name'];
        $friendsurname = $row['surname'];
        $friendusername = $row['username'];
        $friend_image = $row['img'];        
        echo "<a href=\"$friendusername/\"><img src=\"../{$friendusername}/{$friend_image}\" title=\"{$friendforename} {$friendsurname}\"/></a>";
    }

【讨论】:

  • 这个只带了三个好友,没有图片,因为查询只是告诉它选择first_name,surname,usernameFROM用户,它还需要从 user_profile 中选择 img。我如何去告诉它也从这个表中选择而不导致连接错误?
  • @Lit:忘记将 img 添加到原始查询中。现在更新了帖子。请检查一下。
  • 这就是我正在尝试的,但图像仍然是空白,查看源img 没有被检索到
  • 那么在user_profile表中好像没有朋友用户的对应记录。可以直接运行查询看看有没有结果吗?
  • 对不起,我打错了,您的解决方案效果很好!谢谢你的帮助
【解决方案2】:

第二次调用mysql_query() 会弄乱第一次的结果。您必须为它们指定链接标识符,或者首先将第一个查询的所有结果提取到一个数组中,然后遍历该数组以获取图像。

不过,我认为您也可以使用LEFT JOIN user_profile 来获取与原始查询相同的查询中的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 2012-09-04
    • 2010-12-20
    相关资源
    最近更新 更多