加入作为多个OR的替代

时间:2009-08-13 16:38:38

标签: php mysql inner-join

我有两个具有以下结构的表:

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..

任何替代解决方案? 谢谢。

2 个答案:

答案 0 :(得分:1)

SELECT  posts.*
FROM    friends
JOIN    posts
ON      posts.uid = friends.friend_id
WHERE   friends.uid = 'x'

此查询应该有效,因此您最好检查数据。

你偶尔不会让X成为他自己的朋友吗?

如果友情关系对称,我。即如果XY的朋友,那么YX的朋友,那么您应该将表格设为:

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