6

こんにちは、ユーザーが選択できるエンティティのテーブルがあります。ユーザーのお気に入りのエンティティに関する情報を含む別のテーブルもあります。見る:

Entity:

id | ...

SavedEntity:

id | entity_id | user_id

結果を次のようにしたい:

entity_id | ... | favourite

boolean私の質問は、すべてのエンティティを取得し、エンティティがユーザーのお気に入りであるかどうかの値である追加フィールドを追加するクエリを変更するにはどうすればよいですか?

a の使用 (またはエミュレート!) を見てきましたFULL JOINが、これは不必要に複雑に思えて、うまく機能させることができませんでした。CASEキーワードを見てきましたが、やはりうまくいきませんでした。

この多対多のテーブル構造はかなり標準的だと思いますので、必要な情報を取得する標準的な方法があると確信しています.誰かが私が欠けているものを理解するのを手伝ってくれますか?

NB クエリに CodeIgniter とアクティブ レコードを使用していますが、バニラ SQL を回避できます。

4

2 に答える 2

8

私は実験を十分に行っていないことに気付きました。ここに、私が望んでいた結果を生成する最終的なクエリがあります。これは、同様の質問を持つ他の人の結果です。

SELECT Entity.*,
          CASE WHEN UsersSavedEntity.user_id = '$user_id' 
               THEN 1 
               ELSE 0 
          END AS favourite
FROM Entity 
LEFT JOIN (SELECT * 
           FROM SavedEntity WHERE SavedEntity.user_id = '$user_id') 
           AS UsersSavedEntity 
          ON Entity.id = UsersSavedEntity.entity_id
于 2013-07-24T12:45:10.047 に答える