2017-10-26 22 views
0
TABLE surveys: 

id survey_title  date   active 
1 Example Survey  1508842162  1 
2 Example Survey2 1508842162  1 


TABLE survey_user_relation: 

id user_id  survey_id(foregin_key)  active 
1  1    1       1 
2  1    2       0 
3  2    1       1 

私は上記のように2つのテーブルを持っています。 column activeは、サーベイがサーベイテーブル内のすべてのユーザからクローズされ、survey_user_relationテーブル内の1人のユーザからクローズされたことを表します。 user_idとsurvey_idはUNIQUEキーに設定されているため、1人のユーザーが同じアンケートに1回だけ関連付けることができます。 私はすべてのアンケートを一覧表示しようとしています。可能であれば、ユーザーがそのアンケートに1つのクエリで関連しているかどうかを知りたいと思います。2テーブルのデータを結合するMySQL

私は

SELECT * 
    FROM surveys s 
    LEFT 
    JOIN survey_user_relation u 
    ON u.survey_id = s.id 
WHERE u.user_id = 2 

を試みたが、それだけで私はすべての調査を見て、ユーザが関連しているかどうかを知る必要がある1つの調査を提供します。事前に

おかげ

編集:

私は、これはトリックを行う必要があります

id survey_title  date   active  user_id 
1 Example Survey  1508842162  1   2 
2 Example Survey2 1508842162  1   NULL 
+0

はWHEREのuser_id = 2' '取り除きます。これにより、上記のユーザーIDに対して定義された結果が表示されます。 –

+0

それは調査を複製します – Tom

+1

"調査を複製する"とはどういう意味ですか?あなたは明らかではありません。十分な言葉を使用してください。 – philipxy

答えて

1

のようなものを参照してくださいする必要があります。彼は本当に左側に= 2. USER_IDたエントリを取得しているところで

SELECT s.*, u.* 
    FROM surveys s 
    LEFT JOIN survey_user_relation u 
    ON u.survey_id = s.id AND u.user_id = 2; 

は、彼が1がある場合、それ以外の場合は、列にnullを返しチェックに参加します。 ところで、2番目のテーブルに行IDが必要ありません。 survey_idとuser_idをprimaryに設定するだけです。

+0

これは、大丈夫ですが、私は調査を見る必要があるだけの調査1を返します。 2 too – Tom

+0

私もあなたのアンケートに関連しているかどうかを知るためにnullの列を参照する必要があります – Tom

+0

私の編集plsを確認 – TobiasHH

0

私はあなたがこの結果に興味を持っていると思う:

SEELCT distinct s.survey_title, u.user_id 
FROM surveys AS S LEFT JOIN survey_user_relation AS U 
ON U.survey_id = S.id 
関連する問題