次のデータ構造があります。
Pizza
------------------
id| name
--+---------------
1 | The Best Pizza
2 | Other Pizza
Toppings
-----------------------------------------
id| pizza | order | type | requests| name
--+-------+------------------------------
1 | 1 | 0 | A | 10 | something
1 | 1 | 0 | A | 14 | some
2 | 1 | 0 | B | 12 | other
3 | 2 | 1 | A | 40 | another
4 | 2 | 0 | A | 20 | nononnon
したがって、ここでの私の目標は、次のようなものを取得することです
Pizza | Important Topping | Type
---------------+--------------------------------------------------------
The Best Pizza | some | A
The Best Pizza | other | B
Other Pizza | nononnon | A
これの意味は次のとおりです。
Pizza と Topping.Type の各グループについて、最も重要なトッピングが次の順序である場合に、最も重要なトッピングを指定します: Topping.order ASC, request DESC 例: 上記の結果では、「The Best Pizza」の最も重要なトッピングwith type A is some. some と something のトッピングの順序は同じですが、より多くのリクエストがあるものもあります。「その他のピザ」は1種類しかありませんでしたが、「ののんのん」は「別の」よりも注文が少ないため、最も重要なトッピングです。
私が直面している問題は、これを 1 つのクエリで、または少なくとも効率的な方法で達成する方法です。
ここで、トッピングを事前に選択して注文し、これを実現するために一時テーブルと醜い結合を作成する必要がありました。
これを行う方法についての啓発はありますか?
注: これは私が直面している問題の例です。ピザ/トッピング モデルの実際の実装では、これに近づくことはありません。