如果你帮助我,我将不胜感激。我只是想按照货币按价格订购产品。有两种类型的DB。
这是第一个DB中的产品表。
+----+--------------+-------+-------------+
| id | product_name | price | currency_id |
+----+--------------+-------+-------------+
| 1 | X PRODUCT | 11.00 | 1 |
| 2 | Y PRODUCT | 10.00 | 2 |
+----+--------------+-------+-------------+
这是第一个DB中的货币表。
+----+------+-------+
| id | name | value |
+----+------+-------+
| 1 | USD | 1.00 |
| 2 | EUR | 1.26 |
+----+------+-------+
这是DB结构的第二个选项。只有一张桌子。
+----+--------------+-------+----------+
| id | product_name | price | currency |
+----+--------------+-------+----------+
| 1 | X PRODUCT | 11.00 | USD |
| 2 | Y PRODUCT | 10.00 | EUR |
+----+--------------+-------+----------+
我不知道我应该使用哪个数据库,而且我不知道如何按照美元的实际价格按价格订购。
答案 0 :(得分:1)
使用第一个选项(如果货币更改名称,则为合成键),您最终会得到一个简单的JOIN以获得正确的顺序;
SELECT p.*, value*price adjusted_price
FROM products p
JOIN currency c
ON c.id = p.currency_id
ORDER BY adjusted_price
"调整后的价格"列是调整为美元的价格,然后您可以按此顺序。
答案 1 :(得分:0)
我认为,最好将价格保持在一种货币之内。如果您需要保留另一种货币 - 只需为货币价格usd_price
或整个新表创建另一个字段:
product_prices: product_id(int), currency_id(int), price(double)
UPD:为不同货币的实际价格创建方法
def usd_price
price * currency_rates[:usd]
end