2017-01-30 21 views
0

私が設定したテーブル構造と実行しているクエリのリンクを以下に示します。3-4テーブルから選択するSQLクエリ

Link to tables and query.

本結果は、firstnames、lastnames及び "education_finished" が表示されていることです。しかし、option_idとそれに関連するlang_valuesはすべて「NULL」と表示されます。

望ましい結果:

can be found here ...

解決するためにどのように任意の提案ですか?以下は

+0

期待どおりの結果を表示できますか? – Jens

+0

'phpbb_profile_fields_data'と' phpbb_profile_fields_data'の間には関連するフィールドはありません – McNets

+0

'ON d.pf_education_finished = f.field_name' – McNets

答えて

1

は、使用しているクエリです:

SELECT d.pf_firstname, d.pf_lastname, f.field_id, fl.option_id, 
d.pf_education_finished, fl.lang_value 
FROM phpbb_profile_fields_data d 
LEFT JOIN phpbb_profile_fields f 
ON d.pf_education_finished = f.field_name 
LEFT JOIN phpbb_profile_fields_lang fl 
ON f.field_id = fl.field_id 
ORDER BY d.pf_lastname ASC 

あなたがnull値を取得している理由は、このための条件は次のとおりです。

LEFT JOIN phpbb_profile_fields f 
ON d.pf_education_finished = f.field_name 

あなたはpf_education_finishedにjoinしようとしている(int )フィールドと別のテーブルのfield_name(int)フィールドを使用します。また、一致する値もありません(例:pf_education_finishedは数字を含み、field_nameは「教育終了」です)。

クエリが何かを返したい場合、あなたは例えば、フィールドIDを照合して、いくつかのレコードを持っているfield_idphpbb_profile_fieldsニーズにjoinに必要:

SELECT d.pf_firstname, d.pf_lastname, f.field_id, fl.option_id, 
d.pf_education_finished, fl.lang_value 
FROM phpbb_profile_fields_data d 
LEFT JOIN phpbb_profile_fields f 
ON d.pf_education_finished = f.field_id 
LEFT JOIN phpbb_profile_fields_lang fl 
ON f.field_id = fl.field_id 
ORDER BY d.pf_lastname ASC 

はここで更新SQL Fiddleです。

1
SELECT d.pf_firstname, d.pf_lastname, f.field_id, fl.option_id, 
d.pf_education_finished, fl.lang_value 
FROM phpbb_profile_fields_lang fl 
inner JOIN phpbb_profile_fields f 
ON f.field_id = fl.field_id 
inner JOIN phpbb_profile_fields_data d 
ON f.field_id = fl.field_id 
ORDER BY d.pf_lastname ASC 

あなたは3-4のテーブルからデータを表示したいが、このクエリで名前がphpbb_profile_fields_langcount of field_id存在につきとして繰り返している場合、これは、オプションのクエリです。

データを取得しているすべてのテーブルに同じプライマリキーがある場合は、正確な解決方法があります。

ありがとうございます。

関連する問題