我还在编写一个社交网络脚本,我现在已经完成了很多工作,但是有一个我无法解决的问题,即输出用户和用户登录的所有帖子,后者是问题。
通过以下声明,我能够获取状态消息以输出,但是其他信息(例如他们的姓名和个人资料信息)是不是已加入?我认为这就是没有发生的事情:
因此,当它不是登录用户时,它们会显示其状态,但是当其登录时(例如UserID 1,是的...我已删除变量并只是输入一个数字)它只是显示他们的消息并且不访问用户信息。
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_users表
如果有任何人注意到语法错误,我会非常感激,如果你能解释我做错了所以我可以纠正它。感谢
答案 0 :(得分:2)
将外部联接表上的条件放入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值。将值与NULL进行比较会返回“undefined”,因此条件为false,过滤掉所有“外部连接”的行。
答案 1 :(得分:0)
我解决了这个问题而忘记将其标记为已解决,基本上我在一个真正的纠结中得到了联接。我坐下来,想到了我想要实现的目标,这是我提出的最终工作查询。
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
感谢帮助人员!