【发布时间】:2015-12-15 17:33:21
【问题描述】:
我试图在 MySQL 数据库中获取某些服务的价格,计算如下:
我有 4 张桌子:
- 服务(idService (INT), ...)
- 日期 (idDate (INT), idService (INT), 日期 (DATETIME), 公里 ( INT), 安装(BOOL), ...)
- 功能(idFeature (INT)、描述 (VARCHAR)、价格 (FLOAT)、...)
- Features_Services(idFeature (INT)、idService (INT)、单位 (INT)、折扣 (浮点数), ...)
关系:
日期和服务之间的一对多:因此,服务可以在多个日期进行,每个日期都有相关的公里(以量化差旅费用, 最终服务价格每人 0.6 欧元)和安装(如果在每个日期不活跃,服务价格将递减恒定值,在我的情况下为 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
问题是我需要遍历所有相关的日期以提取公里和安装,并对价格进行必要的更正... 也许在一个选择里面有一个选择,对于日期??
非常感谢任何帮助。 比你提前。
【问题讨论】:
-
将 FLOAT 数据类型用于金钱是不寻常的。见十进制。
标签: mysql database relational-database