2013-09-26 14 views
0

У меня есть 3 таблицы:Выбор поле MySQL зависит от другого значения поля

currency 
id | name 
1 | usd 
2 | eur 

currency_date 
id | date | usd | eur 
1 | 22.09.13 | 10 | 12 
2 | 23.09.13 | 11 | 13 
3 | 24.09.13 | 9 | 10 

cost 
id | id_currency | id_currency_date | cost 
1 |  1  |  2   | 15 

Так что для строки с ид = 1 в cost таблицы мы имеем usd с меновой стоимостью 11.

Возможно ли получить значение поля по имени другого поля в другой таблице?

Я думаю, что нужно что-то вроде этого:

SELECT currency_date.VAR(currency.name) AS cur_val 
FROM cost 
LEFT JOIN currency ON currency.id = cost.id_currency 
LEFT JOIN currency_date ON currency_date.id = cost.id_currency_date 
WHERE cost.id = 1 

currency_date.VAR (currency.name) только для демонстрации того, что я хочу.

+0

Это будет работать лучше, если вы нормализуете свои данные и будете иметь отдельные записи в таблице currency_date для каждой валюты. Тогда простое объединение сделало бы трюк. – Tom

+0

Вы можете жестко закодировать решение, если вы не можете нормализовать. Ожидаете ли вы добавить много валют в будущем? – Tom

ответ

2

Это должно быть сделано.

SELECT case currency.name when 'usd' then currency_date.usd when 'eur' then currency_date.eur end AS cur_val 
FROM cost 
LEFT JOIN currency ON currency.id = cost.id_currency 
LEFT JOIN currency_date ON currency_date.id = cost.id_currency_date 
WHERE cost.id = 1 
+0

Спасибо, это работает ... просто отредактированный код с правильным синтаксисом. – Narek

Смежные вопросы