このDBスキーマを見てください。
ユーザーは製品を注文できます。すべての注文について、注文テーブルに新しいレコードを追加し、ユーザーが注文した単一の製品(およびフィルピースフィールド)のorders-products N:Mテーブルに新しいレコードを追加します。ただし、ユーザーが注文を作成するときは、すべての製品のリストを表示し、任意の製品の注文数量をピースフィールドに入力する必要があります。
通常、それを行うには、2つのクエリを使用します。
最初のクエリは、productsテーブル内のすべての製品を取得します。
SELECT * FROM products;
2番目のクエリは、orders-productsテーブルで注文された商品を、 orders-idorderFKでフィルタリングして取得します。
SELECT orders_idorder AS idorder, products_idproduct AS idproduct, pieces FROM orders_products WHERE orders_idorder=1;
次に、結果を1つの配列にマージし、それを使用して、製品ごとに注文された製品の完全なリストを表示します。最終結果は次のようになります。
+ --------- + ----------- + -------------- + ------- + ---- ---- + | idorder | idproduct | 説明| 価格| ピース| + --------- + ----------- + -------------- + ------- + ---- ---- + | 1 | 1 | 製品1| 10.20 | 2 | | 1 | 2 | 製品22| 11.00 | NULL | | 1 | 3 | 製品333| 19.22 | NULL | | 1 | 4 | 製品4444| 9.20 | NULL | + --------- + ----------- + -------------- + ------- + ---- ---- +
注:上記の例では、productsテーブルに4つのレコードがあり、 orders -productsテーブルに1つのレコードしかありません(idorder = 1、idproduct = 1、pieces = 2があります)。->ここで、クエリをテストするためのSQLダンプ
を
見つけることができます
2つのクエリから構築された配列をマージするのが最善の方法ですか?単一のクエリでそれを行うことができますか?
パフォーマンスについてどう思いますか?