2009-08-13 45 views
1

の代替として参加します。しかし、これは動作していないようは、私は次のような構造を持つ2つのテーブルを持つ複数のORの


SELECT posts.post_text INNER JOIN friends ON posts.uid = friends.friend_id 
WHERE friends.uid = x 

: 私のinital計画は、次のコードを使用することでした。 。

WHERE posts.uid = 'friend_id_1' OR posts.uid = 'friend_id_2' ect.. 

任意の代替のように - (私は×で行われたすべての記事を取得し、Xの友人によって行われたすべての投稿を行って、私は考えることができる唯一の選択肢は、ORのの(おそらく非常に長い)文字列を使用することですソリューション? ありがとう。

答えて

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

このクエリは動作するはずですので、あなたがより良いあなたのデータをチェック。

あなたは時折X自分の友人を作りませんか?

友情関係が対称の場合、i。 e。 XYに友人である場合、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ているので、私はそれをアレンジ。 e。 user_idのユーザーはAになります。

+0

探しているものだと思う:「!とfriends.friend_id = X」にこのクエリ。 – MtnViewMark

0

私はこれがあなたのデータが実際に自分の友人としてのxを持っていない場合は、追加することによって、そのような場合を除外することができます

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 
関連する問題