0

我目前正在与其他 4 人一起在一些社交网络上工作。我目前正在处理提要,但遇到了一个小问题。

我基本上知道为什么会发生这个问题,但我不知道应该如何解决它。

我有2张桌子。1 个用于帖子本身的表(称为posts)和一个用于用户朋友的表(称为users_friends)。

职位表: 这是帖子表。

users_friends表:

这是 users_friends 表

JOIN这两个表,以便我可以只显示你是朋友的用户的帖子。

我的查询看起来像:

SELECT * 
FROM posts 
JOIN users_friends
ON posts.username = users_friends.friend 
OR posts.username = '{$db['username']}'
WHERE users_friends.user = '{$db['username']}'
ORDER BY timestamp DESC

$db['username']= 登录用户用户名

因为我的用户 ,shawn31313在表格中出现了两次,所以users_friends每个帖子都翻了一番。使用此查询的结果是:

在此处输入图像描述
我不知道如何解决这个问题。这是我第一次使用JOIN,而且我对MySQL一般来说还很陌生,所以我不确定现在该怎么做。谢谢你的帮助。

4

1 回答 1

0

我认为您的查询有问题。当我查看您的数据库结构时,我可以看到 post 表中有用户名列。那个用户名是给发表评论的用户的,对吧?如果是这样,那么您只需要检查该用户是否在您的朋友列表中。

你可以做类似的事情

SELECT *
FROM POSTs
WHERE USERNAME IN (SELECT FRIENDS FROM USER_FRIENDS WHERE USER = 'shawn31313' union all select 'shawn31313' )

更快的查询将是:

SELECT *
FROM POSTs AS A INNER JOIN (SELECT FRIENDS FROM USER_FRIENDS WHERE USER = 'shawn31313' union all select 'shawn31313' ) AS B ON A.USERID   = B.FRIENDS

逻辑是找到你所有的朋友,然后找到他们的所有帖子。

于 2013-07-08T04:04:48.597 回答