2017-10-01 18 views
0

名前はブランチ名で、各ブランチには同じテーブルのidカラムを参照する親を持つことができます。この例では、「リバプール」、「マンチェスター」、「チェスター」はすべて「ノースウェスト」の子どもであり、それ自体が「マスター」の子です。MySQLでのSELECTステートメントのカスケード

id name    parent_id 
1 Master    0 
2 North West   1 
3 Liverpool   2 
4 Manchester   2 
5 Chester   2 

私は、このようになります。これは、branchSettingsテーブルを持っている:それはマスターのよう

id branch_id settingKey settingValue 
1 1   waitTime  5 
2 1   timeOutTime 10 
3 2   waitTime  7 
4 5   waitTime  15 

支店1(「マスター」)は常にすべての設定がありますし、すべての子供は、これらの設定を継承する必要がありますただし、必要に応じて各ブランチがデフォルト設定を上書きすることができます。例えば、 'North West'(id 2)は 'Liverpool'、 'Manchester'、 'C​​hester'とカスケードする必要がある 'waitTime'を5から7に上書きしましたが、 'Chester'(id 5) 'はノースウェストとマスターの両方をオーバーライドして15にする必要があります。

これをPHPでコード化するのではなく、SELECTコマンドをカスケードする簡単な方法があります。私はこう言うことができます... branch_id = 5のテーブルからすべての設定を選択し、彼らはどこにオーバーライド値が存在しますか?だから、それが返されます。

id branch_id settingKey settingValue 
2 5   timeOutTime 10 
3 5   waitTime  15 

おかげ

+0

LEFT JOINとCOALESCEを参照してください。 – Strawberry

+0

私はこれらのコマンドを両方とも使用する方法を知っていると思いますが、私の例ではいくつかのサブブランチがあり、SELECTステートメントはテーブルをカスケードする必要があります。もう少し提供できますか? – Roo

答えて

0

をこのコメントのために少し長いです。

質問: "簡単な方法でSELECTコマンドをカスケードすることはできますか?"

あなたの質問に対する答えは、単純に「いいえ」です(少なくともMySQL 8.0まで)。階層データを格納しています。 SQL(一般的に)は、そのようなデータを処理するためのメカニズムを提供します。 MySQLは現在、それらのどれもサポートしていません。

階層が深すぎない場合は、PHPでの作業はおそらく最も簡単な解決策です。それ以外の場合は、情報を構造化する別の方法を検討することもできます。 Hereは始めるのに適しています。

+0

ゴードンさんに感謝、これは正しい道を私に導いた。 – Roo

関連する問題