2017-04-06 5 views
1

私の例を単純化しようとします。私はuserという2つの関係を持つfriendshipというテーブルを持っています(user1user2と呼ぶことができます)。私は友達のアルファベット順のリストを取得したいと思います。 user1またはuser2に表示されます。私が知ることができる唯一の方法は、ユニオンを使用することです:1つのテーブルとの二重の関係が1つとしてマージされる

SELECT f.* 
FROM 
    (SELECT "user1"."name" AS "name" 
    FROM "friendship" AS "friendship" LEFT JOIN "user" AS "user1" 
    ON "friendship"."user1_id" = "requestedUser"."id" 
    AND "user1"."id" != 'me' 
    WHERE ("friendship"."user2_id" = 'me') 

    UNION 

    SELECT "user2"."name" AS "name" 
    FROM "friendship" AS "friendship" 
     LEFT JOIN "user" AS "user2" 
     ON "friendship"."user2_id" = "user2"."id" 
     AND "user2"."id" != 'me' 
    WHERE ("friendship"."user1_id" = 'me') 
    ) AS f 
ORDER BY "name" 
LIMIT ?; 

もっと簡単な方法はありますか?あるいは、単一のSELECTでそれを行う可能性がありますか?あなたはsequelizeでどうやってそれを知っていますか?

答えて

0

あなたはuser.getFriends()を実行して、すべてのユーザーフレンドを取得できるはずです。あなたがoutboundinboundのようなものにアソシエーションをエイリアス化した場合、user.getInbound()user.getOutbound()になります。

Sequelizeは、関連付けられたモデルを取得できるように、インスタンス上に自動的にメソッドを作成し、名前を付けます。

+0

ありがとうございました。はい、私は知っていますが、私は2つの団体で同じフィールドでソートの友達をしたいという私の問題を解決しません。 – kasiacode

関連する問題