2016-08-29 3 views
0

Iam пытается написать запрос mysql с определенными условиями if.Запрос Mysql с определенным IF ELSE Если условия ELSE

Моя DB структура

Валюта (таблица)

++++++++++++++++++++++++++ 
id | currency | rate 
++++++++++++++++++++++++++ 
1  USD  1 
2  INR  67.10043 
3  GBP  0.761203 
4  EUR  0.89295 
++++++++++++++++++++++++++ 

com_payments (Table) 
++++++++++++++++++++++++++ 
id | amt_curr | amt_paid 
++++++++++++++++++++++++++ 
1  EUR  300.89 
2  GBP  390.90 
3  USD  600.00 
++++++++++++++++++++++++++ 

Запрос я ищу, если

if (amt_curr=='USD') { 
    $totalinr = (amt_paid * rate); (rate it should take from currency table where currency='USD' from currency table) 
} else if ($currency1=='GBP'){ 
    totalinr = ((select currency, rate from Currency where currency=INR/0.761203 (GBP value from currency table)) * amt_paid); 
} else if ($currency1=='EUR'){ 
    totalinr = ((select currency, rate from Currency where currency=INR/0.89295 (EUR value from currency table)) * amt_paid); 
} 

Iam пытается добиться этого с помощью MySQL Query: Я пытался что-то как это, но не работает:

CASE WHEN (amt_curr=='USD') THEN (amt_paid * rate) (rate it should take from currency table where currency='USD' from currency table) 
    WHEN ($currency1=='GBP') THEN ((select currency, rate from Currency where currency=INR/0.761203 (GBP value from currency table)) * amt_paid) 
    WHEN ($currency1=='EUR') THEN ((select currency, rate from Currency where currency=INR/0.89295 (EUR value from currency table)) * amt_paid) 
END AS totalinr 
+0

Любой, чтобы помочь мне в этом PLS? –

ответ

0

Это просто можно сделать с помощью объединения, вам не нужно использовать CASE EXPRESSION:

SELECT t.*, 
     t.amt_paid/c.rate 
FROM com_payments t 
INNER JOIN currency c 
ON(c.currency = p.amt_currency) 

EDIT:

SELECT t.*, 
     CASE WHEN c.currency = 'USD' THEN t.amt_paid * c.rate --By the way, you can use only amt_paid since rate is always 1 
            ELSE t.amt_paid/c.rate 
     END 
FROM com_payments t 
INNER JOIN currency c 
ON(c.currency = p.amt_currency) 
+0

Я проверил запрос, но я не получаю желаемого результата. Например. Я пытаюсь преобразовать это в значения INR. Сохранение данных в базе данных с базовой валютой в долларах США. Поэтому, если сумма равна 10, а Currency - USD, то totalinr должен быть 77. ($ totalinr = (10 * 67.10043)). \t В случае с запросом, как упомянуто u, я получил результат 1 –

+0

@SanjuMenon Затем замените '/' на '*', и разве это не должно быть 670? '67 * 10' – sagi

+0

Да, я согласился, что это 670. Мне жаль. Это нормально с долларом США. Но если выбранная валюта отличается от доллара США, у меня есть другой расчет, так как базовая валюта - доллар США. Так что, возможно, мне удастся добиться этого в одном запросе. –

0

Вам просто нужен join. На самом деле в вашем запросе отсутствует select. Я подозреваю, что это делает то, что вы хотите:

select p.*, 
     p.amt_paid/c.rate 
from com_payments p left join 
    currency c 
    on c.currency = p.amt_currency; 

Это преобразует все значения в долларах США (на основе валютных курсов). Вы можете использовать аналогичную логику для конвертации любой другой валюты, если хотите.

+0

Я проверю то же самое –

+0

Я проверил запрос, но я не получаю желаемого результата. Например. Я пытаюсь преобразовать это в значения INR. Сохранение данных в базе данных с базовой валютой в долларах США. Поэтому, если сумма равна 10, а Currency - USD, то totalinr должен быть 77. ($ totalinr = (10 * 67.10043)). –

+0

В случае с запросом, как упомянуто u, я получил результат 1. –