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