【问题标题】:Query multiple currencies查询多种币种
【发布时间】:2010-04-30 09:56:08
【问题描述】:

我需要在我的数据库中存储多种货币...这是问题所在:

示例表:

[ Products ]
id (INT, PK)
name (VARCHAR)
price (DECIMAL)
currency (INT, FK)

[ Currencies ]
id (INT, PK)
name (VARCHAR)
conversion (DECIMAL) # To U$

我将使用用户选择的货币存储产品价格...

稍后我需要使用价格区间搜索产品,例如“搜索产品 > 价格从 50 美元到 100 美元”,我需要系统“即时”转换这些值以运行 SQL 查询和过滤产品。

而且我真的不知道如何进行此查询...:/

也许是这样的?

SELECT p.`name`, p.`price` * c.`conversion` AS price
FROM `products` AS p
INNER JOIN `conversion` AS c
   ON p.`currency` = c.`id`
WHERE price >= 50 AND price <= 100
LIMIT 10

【问题讨论】:

    标签: sql mysql search currency


    【解决方案1】:
    SELECT P.name, P.price local_price, P.price * C.conversion usd_price
    FROM   Products P
    INNER JOIN Currencies C
    ON     C.id = P.currency
    

    然后你可以添加类似的条件

    WHERE (P.price * C.conversion) > 50
    

    价格高于 50 美元。

    编辑

    如果您没有,最好有美元的货币记录(转换值为 1.0),这样转换为美元的情况也不例外。

    【讨论】:

    • 很好的答案!我需要在WHERE 的情况下再次乘以这些值吗?即使我在SELECT 部分给它起了别名?
    • 我不确定 MySQL - 我是 SQL Server 用户 - 我通常必须将计算重写到 WHERE/ON 子句中。如果有人告诉我不同​​,我会是一个非常幸福的人=)
    【解决方案2】:

    在我的脑海中,我能想到的是,您的美元乘数将为 1,因此您可以将价格与转换相乘,并在查询中获取美元价值,并在这些衍生价值上使用您的范围.或者,如果您想反规范化,请在 Products 中引入一个名为“USD_price”的新列,并在其中保存价格 * 转换的值,这将简化并加快速度。但是我必须指出,转换率并不总是相同的,不确定您是如何处理的。

    【讨论】:

    • 是的...这就是我来这里的原因...这些费率每小时或更少变化:)
    • 是的,在这种情况下,只需将 2 列相乘并获得等值美元。我认为 Joels 的解决方案应该可以完美运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2014-01-28
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    相关资源
    最近更新 更多