我有两个具有以下结构的表:
table name: friends
uid (PK)(FK)
friend_id (PK)(FK)
table name: posts
post_id (AI)(PK)
post_text
uid (FK) //poster id
我想选择仅由用户x
的朋友制作的帖子。
我的初步计划是使用以下代码:
SELECT posts.post_text INNER JOIN friends ON posts.uid = friends.friend_id
WHERE friends.uid = x
但是,这似乎不起作用。 (我用x完成了所有帖子,完成了X的朋友完成的所有帖子。我能想到的唯一选择是使用一个(可能很长)OR的字符串 - 如
WHERE posts.uid = 'friend_id_1' OR posts.uid = 'friend_id_2' ect..
任何替代解决方案? 谢谢。
答案 0 :(得分:1)
SELECT posts.*
FROM friends
JOIN posts
ON posts.uid = friends.friend_id
WHERE friends.uid = 'x'
此查询应该有效,因此您最好检查数据。
你偶尔不会让X
成为他自己的朋友吗?
如果友情关系对称,我。即如果X
是Y
的朋友,那么Y
是X
的朋友,那么您应该将表格设为:
friends (a, b, PRIMARY KEY (a, b), KEY (b))
SELECT posts.*
FROM (
SELECT b AS friend_id
FROM friends
WHERE a = 'X'
UNION ALL
SELECT a AS friend_id
FROM friends
WHERE b = 'X'
) friends
JOIN posts
ON posts.uid = friends.friend_id
在插入一对朋友之前,请务必安排好A < B
,i。即最少user_id
的用户进入A
。
答案 1 :(得分:0)
我认为这就是你要找的东西
SELECT posts.post_text INNER JOIN friends ON posts.uid = friends.friend_id
Inner join friends fr on friends.friend_id = fr.uid
WHERE friends.uid = x