2016-08-29 2 views
0

특정 if 조건을 사용하여 mysql 쿼리를 작성하려고합니다.특정 IF ELSE가있는 MySQL 쿼리 ELSE 조건 인 경우

내 DB 구조

환율 (표)

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); 
} 

스피 MySQL의 쿼리와이를 달성하기 위해 노력하는 경우

++++++++++++++++++++++++++ 
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 
++++++++++++++++++++++++++ 

내가 찾고 있어요 쿼리가이다 : 뭔가 시도 이 기능은 작동하지 않습니다.

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) 

편집 :

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

쿼리를 확인했지만 원하는 결과를 얻지 못했습니다. 예를 들어. IAM이 값을 INR 값으로 변환하려고합니다. 기본 통화가 USD로 설정된 데이터베이스에 데이터 저장 중. 따라서 금액이 10이고 통화가 USD 인 경우 totalinr은 77이어야합니다 ($ totalinr = (10 * 67.10043)). \t u가 언급 한 쿼리의 경우 결과가 1입니다. –

+0

@SanjuMenon 그런 다음'/'을'*'로 바꾸십시오. 670이 아니어야합니까? '67 * 10' – sagi

+0

예, 제가 670 이에 동의했습니다. 죄송합니다. USD로 괜찮습니다. 그러나 선택한 통화가 USD가 아닌 경우 기본 통화가 USD이므로 다른 계산을합니다. 그래서 어떻게 하나의 쿼리에서 그 달성하는 방법을 pls 수 있습니다. –

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

나는 조회를 검사하고 그러나 나는 원하는 결과를 얻고 있지 않다. 예를 들어. IAM이 값을 INR 값으로 변환하려고합니다. 기본 통화가 USD로 설정된 데이터베이스에 데이터 저장 중. 따라서 금액이 10이고 통화가 USD 인 경우 totalinr은 77이어야합니다 ($ totalinr = (10 * 67.10043)). –

+0

u가 언급 한 쿼리의 경우 1의 결과가 나타납니다. –