2016-10-19 5 views
0

私のテーブルから "friends"のリストを取得しようとしています。私は2つのテーブルを持っています.1つはユーザーリストを格納し、もう1つはこのユーザーとの関係を格納します。私はsqlfiddleのサンプルスキーマを追加します。MySQLは2つのテーブルから1つのクエリでリレーションユーザを取得します

CREATE TABLE tbl_users 
    (`id` int, `name` varchar(7), `description` varchar(55)); 

INSERT INTO tbl_users 
    (`id`, `name`, `description`) 
VALUES 
    (1, 'John', '111'), 
    (2, 'Derrik', '222'), 
    (3, 'Nikolas', '333'), 
    (4, 'Hellen', '444'), 
    (5, 'Jack', '555'); 

CREATE TABLE tbl_relations 
    (`id` int, `user_id` int, `following_id` int); 

INSERT INTO tbl_relations 
    (`id`, `user_id`, `following_id`) 
VALUES 
    (1, '1', '2'), 
    (2, '1', '3'), 
    (3, '1', '4'), 
    (4, '2', '1'), 
    (5, '4', '1'); 

はい、私は2つのクエリを行い、その後、それを比較することができますが、私は事これは1で動作するはずです:私は、指定したユーザーIDのすべての「友人」をフェッチする必要があります。予想

結果:指定したユーザーID = 1の場合、結果は2,4ユーザー

Thxをを取得する必要があります。

+1

使用は1つのクエリ内の両方のテーブルから値を取得するために参加します。 uはu.id = 1 ' –

+0

'私はそれを投稿しています。 – Karthi

+2

'foreginを持つ2つのテーブルがtbl_users * FROM を選択join' – Blinkydamo

答えて

0

テーブル

  1. は、ユーザー
  2. 関係

二つのテーブルが同じ値を持つ列を持っている必要があります。列がuser_idであればそう

SELECT * from users,relations WHERE users.user_id = relations.user_id;

私はこの答えはあなたを助けることができると思います:)

+0

それは私が期待したものではありません。これは例である –

+0

これはクロスジョインを行うことに注意してください。 100人のユーザーがいる場合は問題ありませんが、100,000人のユーザーがいる場合は問題ありません。 – iSS

+0

@iSS uの意味、別の構造体が必要ですか? –

-1

これは、代わりに友人を取得するにはユーザーIDの2,3 1

を返す必要がありますのIDの使用

SELECT * from tbl_users WHERE id IN (SELECT id FROM tbl_relations 
WHERE user_id = 1 AND id != user_id); 
+0

しかし、これはユーザー1とユーザー2だけで、ユーザー1とユーザー2、ユーザー4との関係はありません。 –

+0

それを訂正した.. –

0

これを試す:

SELECT tbl_users.* 

FROM tbl_users 

INNER JOIN tbl_relations ON tbl_relations.user_id = tbl_users.id 

More about join

0

"結果は予想:指定したユーザーID = 1の場合、結果がどうあるべき2,4のユーザーを取得"

SELECT x.following_id reciprocations 
    FROM tbl_relations x 
    JOIN tbl_relations y 
    ON y.user_id = x.following_id 
    AND y.following_id = x.user_id 
WHERE x.user_id = 1; 
関連する問題