1

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

使用以下语句,我已经能够获得状态消息以输出,但是其他信息,例如他们的姓名和个人资料信息没有.. 加入?我认为这没有发生:

所以,当它不是登录用户时,他们的状态旁边会显示,但是当它的人登录时(例如,用户 ID 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 表

al_users 表

al_users 表

如果有人注意到语法有任何错误,如果您能解释我做错了什么以便我纠正它,我将不胜感激。谢谢

4

2 回答 2

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 进行比较返回“未定义”,因此条件为假,过滤掉所有“外部连接”的行。

于 2013-04-30T11:53:45.440 回答
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

谢谢你们的帮助!

于 2013-05-19T23:28:01.763 回答