我目前正在与其他4个人在一个小社交网络上合作。我正在研究饲料,我遇到了一个小问题。
我基本上已经知道问题发生的原因,但我不知道应该如何修复它。
我所拥有的是2张桌子。帖子本身有1个表(称为posts
),另一个表用于用户朋友(称为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
一般都是新手,所以我不知道现在该做什么。谢谢你的帮助。
答案 0 :(得分: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
逻辑是找到你所有的朋友然后找到那些的所有帖子。