これは本当にあなたの質問になっているのかどうかはわかりませんが、面白い小さなデータベース演習だと思いました。あなたは#1に提案するよう、「設定」と呼ばれるテーブルがあるとします。
+------------+--------------+-----------+---------------+
| setting_id | setting_name | is_system | setting_value |
+------------+--------------+-----------+---------------+
| 3 | foo | 1 | Blue |
| 4 | foo | 0 | Red |
| 5 | bar | 1 | Green |
| 6 | baz | 1 | Yellow |
| 7 | baz | 0 | Orange |
| 8 | quux | 0 | Purple |
+------------+--------------+-----------+---------------+
主キーがsetting_id
になり、ユニーク制約が(ブール値である)の列setting_name
とis_system
に適用されます。(ユーザー設定のオーバーライドシステム設定を仮定して)現在アクティブな設定のすべてを検索するに
、次のクエリは、仕事をするクエリを実行する
SELECT setting_name, setting_value
FROM setting s
WHERE is_system = (
SELECT MIN(is_system)
FROM setting si
WHERE s.setting_name = si.setting_name
);
は、この結果を生成します。
+--------------+---------------+
| setting_name | setting_value |
+--------------+---------------+
| foo | Red |
| bar | Green |
| baz | Orange |
| quux | Purple |
+--------------+---------------+
したがって、ユーザー設定が存在する場合はフェッチされ、そうでない場合はシステムのデフォルトが代わりに使用されます。
このように、MIN()
関数を使用することは、ブール値で操作するのに奇妙な方法ですが、十分に簡単です。
「システムユーザー設定」とは何ですか?デフォルトのユーザー設定を意味しますか? –
私はゲームのコレクションを書いています。これらのゲームの船には、各ゲームのいくつかのデフォルトのシステム設定が付属します。ユーザーは自分の設定を行い、代わりにこれらを使用することができます。 – Wouter