2013-02-16 20 views
0

所以我有一個小問題,同時使用SQL和PHP。我有一個SQL數據庫有4個表,即客戶,請求,產品和賣家。現在,每個表格都包含自解釋數據。如客戶表列出了客戶,ID,姓名,地址,電子郵件等,產品表具有產品ID和名稱,請求表顯示了客戶用request id[pk], custID[fk from customer table], productid[fk in products table], quantites_requested, price_requested製作的產品的請求。賣方表包含的數據如sellersid[pk], customerid[fk from customer table], productsid[fk in products table], quantites_advertised, price_advertised
現在我想要做的是說一個客戶要求productid = 1(巧克力),客戶id = 1,10kg已被要求£10.00因此,這些數據存儲在D B。 現在,可能會有不同的巧克力賣家,我想要做的是以最便宜的方式完成客戶訂購,即10公斤巧克力。通過結合賣家或選擇一個最便宜的賣家。所以,例如,這是賣家表。注意:賣家表的結構如下:sellerid[pk],customerid[fk],productid[fk],quantity_advertised, price_advertised。所以這裏有一些例子,賣家...SQL查詢做需求的具體匹配

1,2,1,4.00,2.00 -- This means customer id 2 is selling chocolates, for 4KG's @£2.00 
2,3,1,5.00,2.50 
3,4,1,1.00,1.00 
4,5,1,10.00,6.00 

現在,我們有我們的要求是狀態

1,1,1,10.00,5.00 -- i.e. customer1, wants chocolates of 10kg for £5.00... 

現在我想以滿足客戶10千克順序。所以我需要做的是選擇最便宜的價格爲客戶。這可以通過選擇賣家2,3和4以5,4和1kg = 10kg的公斤來完成,這將花費總共£2.00 +£2.50 +£1.00 =£5.50便宜,然後賣家5可以提供10KG 6.00 。我相信我可以使用SQL查詢來做這樣的事情,它首先將客戶請求產品ID與賣家產品ID相匹配,即SELECT c.Name, p.Name, s.quantity,s.price WHERE c.id=s.customerid AND p.id=s.productid AND s.quantity WHERE r.productid=s.productid FROM requests r, sellers s 然而,我將如何能夠選擇最便宜的選項供應商,大型供應商採取最具成本效益?我相信我需要在查詢中的某處使用MIN。

有人可以指導我如何構建查詢所述。即需要以最便宜的方式滿足全部客戶請求。

+0

是否可以重新設計您的數據庫?你的問題存在。例如,你的賣家表不應該有一個客戶ID。此外,您需要產品和賣家之間的多對多關係。 – 2013-02-16 16:16:53

+0

是的,我可以重新設計它,但這意味着花費很長時間試圖改變當前的代碼。關鍵在於賣家的客戶關係,因爲客戶既可以是希望購買產品並銷售其產品的人。是的,我相信我的賣家表確實允許這...因爲賣家表列出賣家和他們賣的產品? – johnny 2013-02-16 16:21:35

回答

0

根據您當前的數據庫設計,這點我還是建議改變,你的查詢將是這樣的:

select s.name SellerName 
, p.name ProductName 
, s.price_advertised price 

from sellers s join products p on s.productid = p.productid 
join request r on r.productid = p.productid 
join (
select sellerid sid 
, min(price_advertised) LowestPrice 
from sellers ss join request rr on ss.productid = rr.productid 
group by sellerid 
) sq on sid = s.sellerid and s.advertised_price = LowestPrice 

這是一個簡單的例子。您必須對其進行修改才能將請求合併到多個產品中。

+0

感謝您的建議,我會盡力實施。 :) – johnny 2013-02-16 16:46:07

+0

我明白你的第幾行,但是,我有點困惑你的意思是用這個'min(price_advertised)LowestPrice ROM'你從哪裏得到'最低價格和ROM'?我的意思是什麼意思?最後,sid上的sq是什麼意思?對不起,我只是對你的意思有點困惑。並且,sid是賣家表中的自動增量主鍵,每當賣家在填寫屬性請求的站點上列出他的產品時,它就會加1。例如數量價格等... – johnny 2013-02-16 17:01:47

+0

LowestPrice是min(price_advertised)的別名。 ROM是沒有f的詞。我糾正了這個錯誤。 – 2013-02-16 17:05:34