Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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
带有联接的SQL语句&;where子句_Sql_Left Join - Fatal编程技术网

带有联接的SQL语句&;where子句

带有联接的SQL语句&;where子句,sql,left-join,Sql,Left Join,我仍在编写一个社交网络脚本,现在我几乎已经完成了它,但是有一个问题我一直无法解决,那就是用户和登录的用户输出所有帖子,后者就是问题所在 通过下面的语句,我已经能够获得要输出的状态消息,但是其他信息,例如他们的姓名和配置文件信息,则不能。。加入?我认为这是没有发生的事情: 因此,当不是登录用户时,他们的状态会显示在旁边,但是当是登录用户时(例如UserID 1,yes.。我删除了变量,只输入了一个数字),它只显示他们的消息,不访问用户信息 SELECT * FROM al_posts

我仍在编写一个社交网络脚本,现在我几乎已经完成了它,但是有一个问题我一直无法解决,那就是用户和登录的用户输出所有帖子,后者就是问题所在

通过下面的语句,我已经能够获得要输出的状态消息,但是其他信息,例如他们的姓名和配置文件信息,则不能。。加入?我认为这是没有发生的事情:

因此,当不是登录用户时,他们的状态会显示在旁边,但是当是登录用户时(例如UserID 1,yes.。我删除了变量,只输入了一个数字),它只显示他们的消息,不访问用户信息

SELECT * FROM al_posts
        LEFT JOIN al_friendships ON al_posts.user_id = al_friendships.user_b 
        LEFT JOIN al_users ON al_friendships.user_b = al_users.id
        WHERE al_friendships.user_a = '{$_SESSION['UserID']}' OR al_posts.user_id = '{$_SESSION['UserID']}'
有问题的表的数据库结构:(注意,友谊表不是问题,所以我省略了它)

al_posts表

al_用户表


如果有人注意到语法有任何错误,如果你能解释一下我做错了什么,我会非常感激,这样我就可以纠正它了。谢谢

将外部联接表上的条件放入where子句将有效地将其转换为内部联接。您需要在连接条件中应用此选项:

SELECT * 
FROM al_posts
  LEFT JOIN al_friendships 
         ON al_posts.user_id = al_friendships.user_b 
        AND al_friendships.user_a = '{$_SESSION['UserID']}'
  LEFT JOIN al_users ON al_friendships.user_b = al_users.id
WHERE al_posts.user_id = '{$_SESSION['UserID']}'

该条件使其成为内部联接的原因是“不”匹配的行在外部联接表的列中返回空值。将值与NULL进行比较会返回“未定义”,因此条件为false,过滤掉所有“外部连接”的行。

我解决了这个问题,忘记将其标记为已解决,实际上,我得到的连接非常复杂。我坐下来,仔细思考我想要实现的目标,这是我提出的最后一个工作问题

SELECT * 
    FROM al_posts
    JOIN al_friendships 
    ON al_posts.user_id = al_friendships.user_b 
    AND al_friendships.user_a = '{$_SESSION['UserID']}'                                     
    JOIN al_users ON al_friendships.user_b = al_users.id

谢谢你们的帮助

看起来您实际上没有显示al_users表中的任何内容。不要写“选择*来自al_posts”,因为它只显示al_posts表中的数据;而是列出您希望显示的字段,包括al_users.username、al_users.forename等。@No'amNewman我正在获取我需要的所有数据,就在我对登录用户提出质疑时,这没什么作用。@a_horse_with_No_name WHERE子句似乎引起了问题,如果没有它,它将显示来自用户朋友的帖子,然而,有了它,它将什么也不显示。此外,WHERE子句是否不在al_用户加入范围之外?因此没有为发布它的用户获取任何数据?