0

アップデート:

それ以来、私がこれを行っていた方法は最適ではなく、適切に機能することは決してないことに気付き、現在は 3 つではなく 2 つのテーブルを使用していますが、これは機能しているようです.

解決策がある場合は回答を歓迎しますが、他の人が同様の問題を抱えている場合にのみ役立つようにしてください.


uid、名前、および基本情報を含むユーザーテーブルがあります。sid、設定の名前、および設定のデフォルト値を含む設定テーブルがあります。

また、ユーザーの設定を設定の名前とユーザーの名前の両方にリンクする、sid、uid、および値を含む users_settings テーブルもあります。

1 つのクエリで、どのようにユーザーを選択し、設定テーブルを "ループ" して、ユーザーの設定が存在する場合は users_settings で、存在しない場合はその設定のデフォルト値を設定ごとに選択しますか?

各設定は、結果セットに列として表示されることが望ましいです (列の名前は設定の名前であり、値は設定の値です)。

それが理解できなかった場合、ここに例があります:

ユーザー テーブル:

uid name   email
1   Maria  maria@example.com
4   George george@example.com

設定表:

sid name     default_value
1   uicolour #f00
2   language en

users_settings テーブル:

uid sid value
4   1   #000
1   2   es

uid 4 の MySQL クエリからの望ましい結果:

uid name   email              setting_colour setting_language
4   George george@example.com #000           en

uid 1 の MySQL クエリからの望ましい結果:

uid name   email             setting_colour setting_language
1   Maria  maria@example.com #f00           es
4

1 に答える 1

0

わかりました、それをいじくり回し、左結合についてさらに学習した後、これはうまくいくようです:

SELECT t_users.*, t_users_settings.*, t_settings.*
FROM t_users 
LEFT JOIN t_users_settings ON t_users.uid = t_users_settings.t_uid  
LEFT JOIN t_settings ON t_settings.t_sid != t_users_settings.t_sid
WHERE t_users_settings.t_sid IS NOT NULL 
AND t_users_settings.t_uid IS NOT NULL 
AND t_users.uid = '<input user id here>';
于 2012-07-06T18:37:31.370 に答える