【问题标题】:Ordering price according to actual value by currency type in mysql在mysql中按货币类型根据实际价值订购价格
【发布时间】:2014-10-02 21:26:48
【问题描述】:

如果您能帮助我,我将不胜感激。我只想根据货币按价格订购产品。有两种类型的数据库。

这是第一个数据库中的产品表。

+----+--------------+-------+-------------+
| id | product_name | price | currency_id |
+----+--------------+-------+-------------+
|  1 | X PRODUCT    | 11.00 |           1 |
|  2 | Y PRODUCT    | 10.00 |           2 |
+----+--------------+-------+-------------+

这是第一个数据库中的货币表。

+----+------+-------+
| id | name | value |
+----+------+-------+
|  1 | USD  |  1.00 |
|  2 | EUR  |  1.26 |
+----+------+-------+

这是数据库结构的第二个选项。只有一张桌子。

+----+--------------+-------+----------+
| id | product_name | price | currency |
+----+--------------+-------+----------+
|  1 | X PRODUCT    | 11.00 | USD      |
|  2 | Y PRODUCT    | 10.00 | EUR      |
+----+--------------+-------+----------+

我不知道我应该使用哪个数据库,我不知道如何按照美元的实际价格按价格订购。

【问题讨论】:

    标签: mysql currency


    【解决方案1】:

    使用第一个选项(合成密钥以防货币更改名称),您最终会得到一个简单的 JOIN 来获得正确的排序;

    SELECT p.*, value*price adjusted_price
    FROM products p
    JOIN currency c
      ON c.id = p.currency_id
    ORDER BY adjusted_price
    

    An SQLfiddle to test with.

    “调整后的价格”栏是调整为美元的价格,然后您就可以按此下单了。

    【讨论】:

    • 这就是我想要的。奇迹般有效。提前谢谢你。
    • 索引和性能怎么样? adjusted_price 的订单未编入索引。
    【解决方案2】:

    我认为,最好将您的价格控制在一种货币范围内。如果您需要保留另一种货币 - 只需为 usd_price 或带有货币价格的全新表创建另一个字段: product_prices: product_id(int), currency_id(int), price(double)

    UPD:为不同货币的实际价格创建方法

    def usd_price
      price * currency_rates[:usd]
    end
    

    【讨论】:

    • 您的意思是我应该为 products 表中的每种货币创建字段吗?那我怎样才能让它们在mysql中按汇率更新呢?我想保持最新的汇率,我想按实际价格订购产品。我不知道如何按实际价格查询订单。
    • 我是个笨蛋。请给我完整的查询和工作示例:) 我找到了一个关于它的线程,但我真的不明白。 stackoverflow.com/questions/25734194/…
    • @OğuzCanSertel 实际上,如果您想在数据库中获取所有价格,您需要找到一种方法在您的 currency_rate 更改后更新它。
    • 我将更新货币表。但是我怎样才能根据美元的实际价格订购产品。如果你看产品; X 产品是 11 美元,Y 产品是 10 欧元。当我按价格订购 ASC 时,第一项必须是 X 产品。我不知道该怎么做。
    • @OğuzCanSertel 以一种货币保存您的所有产品,然后在需要时通过方法向用户显示另一种货币(并在需要时保留它)
    猜你喜欢
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多