查询 MySQL 以从 4 个表中获取价格
Querying MySQL to get price from 4 tables
我正在尝试获取MySQL数据库中某些服务的价格,计算如下:
我有 4 张桌子:
- 服务 (idService (INT), ...)
- 日期(idDate(INT),idService(INT),日期(DATETIME), 千米 (INT), 安装(BOOL), ...)
- 特征(idFeature(INT),描述(VARCHAR),价格(浮动), ...)
- Features_Services (idFeature (INT), idService (INT) , 单位 (INT), 折扣 (FLOAT), ...)
关系:
日期和服务之间的一对多:因此,一项服务可以在多个日期进行,每个日期都有其相关联的公里(量化差旅费用,每项费用为最终服务价格的 0.6 欧元)和 mounting(如果 not active日期,服务价格将递减一个常数值,在我的例子中是 100 欧元)...
通过Features_Services在功能和服务之间实现多对多:因此,许多服务可以关联许多功能。每个功能都有其单一价格,但关系也有单位和折扣等参数...
好吧,通过以下查询,我正确地得到了一项服务的价格,但只涉及第一个日期的公里数和安装...
SELECT
CASE
WHEN dates.mounting = 0 THEN
SUM(features.price * features_services.units * (1 - features_services.discount / 100)) + 0.6 * dates.kilometers - 100
ELSE
SUM(features.price * features_services.units * (1 - features_services.discount / 100)) + 0.6 * dates.kilometers
END AS servicePrice
FROM features_services
JOIN features ON features_services.idFeature = features.idFeature
JOIN dates ON features_services.idService = dates.idService
WHERE features_services.idService = XXXXXXX
GROUP BY dates.idDate LIMIT 1
问题是我需要遍历所有相关日期,提取公里数和安装,并对价格应用必要的更正...
也许 select 在 select 中用于日期??
非常感谢任何帮助。
比你提前。
我终于用 select 子查询做到了。这是解决方案:
SELECT
features_services.idService AS cid,
SUM(features.price * features_services.units * (1 - features_services.discount / 100)) +
(SELECT 0.6 * SUM(dates.kilometers) FROM dates WHERE dates.idService = cid) +
(SELECT SUM(CASE when dates.mounting = 1 THEN 0 else -100 END) FROM dates WHERE dates.idService = cid) AS importeTotal
FROM features_services
JOIN features ON features_services.idFeature = features.idFeature
WHERE features_services.idService = XXXXXXXX
谢谢。
我正在尝试获取MySQL数据库中某些服务的价格,计算如下:
我有 4 张桌子:
- 服务 (idService (INT), ...)
- 日期(idDate(INT),idService(INT),日期(DATETIME), 千米 (INT), 安装(BOOL), ...)
- 特征(idFeature(INT),描述(VARCHAR),价格(浮动), ...)
- Features_Services (idFeature (INT), idService (INT) , 单位 (INT), 折扣 (FLOAT), ...)
关系:
日期和服务之间的一对多:因此,一项服务可以在多个日期进行,每个日期都有其相关联的公里(量化差旅费用,每项费用为最终服务价格的 0.6 欧元)和 mounting(如果 not active日期,服务价格将递减一个常数值,在我的例子中是 100 欧元)...
通过Features_Services在功能和服务之间实现多对多:因此,许多服务可以关联许多功能。每个功能都有其单一价格,但关系也有单位和折扣等参数...
好吧,通过以下查询,我正确地得到了一项服务的价格,但只涉及第一个日期的公里数和安装...
SELECT
CASE
WHEN dates.mounting = 0 THEN
SUM(features.price * features_services.units * (1 - features_services.discount / 100)) + 0.6 * dates.kilometers - 100
ELSE
SUM(features.price * features_services.units * (1 - features_services.discount / 100)) + 0.6 * dates.kilometers
END AS servicePrice
FROM features_services
JOIN features ON features_services.idFeature = features.idFeature
JOIN dates ON features_services.idService = dates.idService
WHERE features_services.idService = XXXXXXX
GROUP BY dates.idDate LIMIT 1
问题是我需要遍历所有相关日期,提取公里数和安装,并对价格应用必要的更正... 也许 select 在 select 中用于日期??
非常感谢任何帮助。 比你提前。
我终于用 select 子查询做到了。这是解决方案:
SELECT
features_services.idService AS cid,
SUM(features.price * features_services.units * (1 - features_services.discount / 100)) +
(SELECT 0.6 * SUM(dates.kilometers) FROM dates WHERE dates.idService = cid) +
(SELECT SUM(CASE when dates.mounting = 1 THEN 0 else -100 END) FROM dates WHERE dates.idService = cid) AS importeTotal
FROM features_services
JOIN features ON features_services.idFeature = features.idFeature
WHERE features_services.idService = XXXXXXXX
谢谢。