Запрос нескольких валют - PullRequest
0 голосов
/ 30 апреля 2010

Мне нужно хранить несколько валют в моей базе данных ... Вот проблема:

Примеры таблиц:

[ 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

Ответы [ 2 ]

3 голосов
/ 30 апреля 2010
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 долларов.

EDIT

Если у вас его нет, рекомендуется записать валюту в долларах США (где значение конверсии равно 1,0), поэтому конвертации в доллары США не являются исключением.

0 голосов
/ 30 апреля 2010

Вне моей головы, я могу подумать, что ваш множитель для доллара будет равен 1, так что вы можете умножить цену на конверсию и получить значение доллара в запросе и использовать свой диапазон для этих полученных значений , ИЛИ, если вы хотите отменить нормализацию, введите новый столбец в разделе «Продукты» под названием «USD_price» и сохраните в нем значение пересчета цены *, это упростит и ускорит процесс. Однако я должен указать, что показатели конверсии не всегда будут одинаковыми, не знаю, как вы справляетесь с этим.

...