0

所以我在使用 SQL 和 PHP 时遇到了一个小问题。我有一个 sql 数据库,它有 4 个表,即客户、请求、产品和卖家。现在,每个表都包含不言自明的数据。例如customers表列出了客户、id、姓名、地址、电子邮件等,products表有产品id和名称,requests表显示了客户对产品的请求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(chocolate),customer id=1, 10kg 已要求 10.00 英镑因此,此数据存储在数据库中。现在,可能有各种各样的巧克力卖家,我想做的是以最便宜的方式完成客户的订单,即 10 公斤的巧克力。通过合并卖家或选择一个最便宜的卖家。因此,例如,这是卖方表。注意:sellers 表的结构如下sellerid[pk],customerid[fk],productid[fk],quantity_advertised, price_advertised:所以这里有一些示例卖家...

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 可以以 6.00 的价格提供 10 公斤. 我相信我可以使用 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 ?

有人可以指导我如何按照所述构造查询。即需要以尽可能最便宜的方式满足客户的全部要求。

4

1 回答 1

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

这是一个简单的例子。您必须对其进行修改以将请求与多个产品合并。

于 2013-02-16T16:36:05.013 回答