2010-04-30 94 views
0

我需要多种货币存储在我的数据库......这里的问题:查询多种货币

例表:

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

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

我会存储产品的价格与所选择的货币用户...

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

而且我真的不知道如何使这个查询...:/

也许这样的事情?

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 

回答

3
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),这样转换到美元是不例外。

+0

+1用于联合使用 – 2010-04-30 10:02:49

+0

很好的答案!我需要在'WHERE'情况下再次乘以这些值?即使我在'SELECT'部分给它一个别名? – 2010-04-30 10:09:44

+0

我不确定MySQL - 我是SQL Server用户 - 我通常必须将计算重写到WHERE/ON子句中。如果有人告诉我不同​​,我会是一个非常快乐的人=) – 2010-04-30 10:44:01

0

关闭我的头顶,我能想到的是,美元乘数为1,所以你可以乘以价格与转换,并获得查询中的美元价值,并使用您的范围在这些勉强值。或者如果您想要解除标准化,在产品中引入名为“USD_price”的新列并将价格*转换的价值保存在那里,这将简化并加快速度。不过,我必须指出,转换率并不总是相同的,不知道你是如何处理的。

+0

是啊...这就是为什么我在这里...这些利率每小时变化不到:) – 2010-04-30 10:06:17

+0

是的,在这种情况下,只需乘以2列并获得相同的美元。我认为乔尔斯解决方案应该完美地工作。 – 2010-04-30 10:07:38