2012-10-31 54 views
0

我有我使用的嘗試並獲得客戶的訂單,他們有4個表:構建select語句

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。

+0

沒有JOIN的? – jtheman

+0

我認爲WHERE語句是加入他們?或者我錯過了什麼? – Dan

+0

數據庫中的記錄顯示,訂單1中應該有2件產品,它只給我一件。 – Dan

回答

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 

由於對訂單的詳細信息分組會列出每個細節一行...