我在下面的图片中有一个数据库架构。 Here is a database schema online
例如,客户想要购买:
service 1 quantity 5
service 2 quantity 2
我想找一家有服务1和2的商店,并按总价订购。
我是否需要首先查询提供这些服务的所有商店。
然后运行循环以按总价计算total_price和订单?
有没有人有更好的解决方案? 请建议我。 谢谢
答案 0 :(得分:0)
我建议将客户想要购买的服务存储在临时表中,例如quotation
,以便后续的sql查询可以处理请求的serviceId
和quantity
的组合。
临时表仅存在于当前会话中,不与其他会话冲突,并在会话结束时自动销毁。许多数据库支持临时表,但语法不同。
当您使用MySQL在SQLFiddle上发布示例时,我提供了基于MySQL语法的解决方案(以及MySQL中的临时表限制)。注意:似乎SQLFiddle无法处理临时表;因此,我将您的架构和我的扩展程序复制到rextester.com。
CREATE TEMPORARY TABLE IF NOT EXISTS request (
serviceId int,
quantity int
);
insert into quotation (serviceId, quantity) values (1,5), (2,2);
create temporary table nrOfServices as (select count(distinct serviceId) as nr from quotation);
请注意,MySql不允许在同一查询中使用两次临时表,这对于以下查询是必需的。因此,引入了计数所请求服务数量的辅助表nrOfServices
(再次临时)。
然后,以下查询应检索所有可以提供所有请求服务的商店以及总价格:
select ss.storeId, sum(ss.price * r.quantity) as total
from store_service ss join quotation r on ss.serviceId = r.serviceId
group by ss.storeId
having count(ss.serviceId) = (select nr from nrOfServices)
order by total desc