带有连接和SQL的SQL语句where子句

时间:2013-04-30 11:47:59

标签: sql left-join

我还在编写一个社交网络脚本,我现在已经完成了很多工作,但是有一个我无法解决的问题,即输出用户和用户登录的所有帖子,后者是问题。

通过以下声明,我能够获取状态消息以输出,但是其他信息(例如他们的姓名和个人资料信息)是不是已加入?我认为这就是没有发生的事情:

因此,当它不是登录用户时,它们会显示其状态,但是当其登录时(例如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_posts table

al_users表

al_users table

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

2 个答案:

答案 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

感谢帮助人员!