0

顧客の注文を取得するために使用している4つのテーブルがあります。

account
- account_id
- username

product
- product_number
- product_name

customer_order
- customer_order_id
- fk_account_id (foreign key)

customer_order_details
- fk_customer_order_id (foreign key)
- fk_product_id (foreign key)    

これは私のクエリです...少し紛らわしいですが:

SELECT customer_order_details.fk_customer_order_id, product.product_name,
customer_order_details.colour, customer_order_details.size
FROM customer_order, customer_order_details, product, account
WHERE customer_order.customer_order_id = 
customer_order_details.fk_customer_order_id
AND customer_order_details.fk_product_id = product.product_id
AND customer_order.fk_account_id = account.account_id
AND account.username = 'user1'
GROUP BY customer_order_details.fk_customer_order_id;

customer_order_details テーブルの外部キー (fk_customer_order_id) でグループ化する必要があります。私が望む結果は次のようなものです:

1
Microfleece Vest
Jacket With Hood

2
Jacket With Hood

代わりに、次のようなものが得られます。

1
Microfleece Vest

2
Jacket With Hood

私の PHP コードは、単純に while ループを実行して、product_name と fk_customer_order_id を出力しています。

4

1 に答える 1

0

JOIN 構文の例を次に示します。

 SELECT d.fk_customer_order_id, p.product_name, d.colour, d.size
 FROM customer_order AS o
 LEFT JOIN customer_order_details AS d ON o.customer_order_id = d.fk_customer_order_id
 LEFT JOIN product AS p ON d.fk_product_id = p.product_id
 LEFT JOIN account as a ON o.fk_account_id = a.account_id
 WHERE a.username = 'user1'
 GROUP BY d.fk_customer_order_id
 ORDER BY d.fk_customer_order_id;

代わりに上記を試してください。テーブルのエイリアスを使用して読みやすくしました。クエリを高速化するには、すべての関係キーにインデックスが設定されていることを確認してください。

ただし、出力は次のようになります。

1 Microfleece Vest
1 Jacket With Hood
2 Jacket With Hood

注文の詳細でグループ化すると、詳細ごとに 1 行が表示されるため...

于 2012-10-31T23:55:46.930 に答える