查询 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

谢谢。