2012-06-12 3 views
0

일주일 전에 관련 질문을했지만 여기 또 다른 문제가 있습니다. 나는 그런 멍청한 놈처럼 느껴진다. 그러나 결코 배워 보지 않는 것보다 묻고 배우는 것이 낫다고 생각한다.MySQL 쿼리 내 더 복잡한 IF 문

전투기 표

fighter_id, name 

이벤트 표

event_id, event_name, event_date 

싸움 표 싸움 테이블에 따라서

fight_id, fighter_a, fighter_b, winner, method, event 

, fighter_a, 전투기 : 여기

내 세 개의 테이블입니다 _b 및 winner는 Fighters 테이블의 fighter_id에 해당하는 정수입니다.

기본적으로 fighter_id를 기반으로 데이터를 검색하는 페이지에 있습니다.

나는 상대방 이름, 결과 (승리, 패배, 추첨, 또는 NC), 방법, event_name 및 event_date가 포함 된 전투기의 각 시합마다 행을 만들려고합니다. Draw 또는 No Contest 인 경우 메서드 열에 Draw 또는 No Contest가 표시되고, Winner는 NULL이됩니다.

나는이 MySQL IF 문을보고 있었고, 전투기가 승리했는지, 분실했는지, 무승부인지, 또는 아무런 컨테스트도 없는지를 결정하기위한 적절한 기준이 무엇인지를 만들었습니다. 이 문이 PHP mysql_query에서 사용될 수있는 것처럼 보이지는 않지만 적어도 조건에 대한 아이디어를 제공합니다. 나는이 3 개의 테이블을 함께 결합 할 필요가 있음을 알고 있지만 우승자/패자/등등을 결정하는 방법을 모르겠습니다 ... fighter_a 또는 fighter_b가 승자가 될 수 있거나 둘 다 될 수 없기 때문입니다. MySQL 쿼리에서 이러한 IF 문에 접근하는 방법을 모르겠습니다.

IF winner IS NOT NULL AND winner=fighter_id THEN SET record='win'; 
ELSEIF winner IS NOT NULL AND winner<>fighter_id THEN SET record='loss'; 
ELSEIF winner IS NULL AND method='Draw' THEN SET record='draw'; 
ELSEIF winner IS NULL AND method='No Contest' THEN SET record='no contest'; 
ELSE SET record=''; 
ELSE IF; 

내가 이런 걸 보면 테이블의 결과를 얻기 위해 노력하고있어 : 내가 제대로 이해하면 http://en.wikipedia.org/wiki/Fedor_Emelianenko#Mixed_martial_arts_record

답변

1

, 당신이 결과를 결정하기 위해 CASE 문을 사용하고자하는 것입니다 생각을 . 전투기는 다음과 비슷한 조인이 필요합니다.

select 
    fight_id, 
    CASE 
     WHEN winner is not null and winner=fighter_id then 'win' 
     WHEN winner is not null and winner<>fighter_id then 'loss' 
     WHEN winner is null and method='Draw' then 'draw' 
     WHEN winner is null and method = 'No Contest' then 'no contest' 
     ELSE '' 
    END as match_result, 
    participant.name 'participant', 
    opponent.name 'opponent' 
FROM fights 
    INNER JOIN fighters as participant on participant.fighter_id = fights.fighter_a 
    INNER JOIN fighters as oppoent on opponent.fighter_id = fights.fighter_b 
+0

위대한! 그것은 완벽하게 작동합니다. 내가 어떻게 상대를 결정할 수있는 아이디어? fighter_a 및 fighter_b 열이 있습니다. 그 중 하나는 $ fighter_id (당신이 찾고있는 것)이고 다른 하나는 그의 상대입니다. 나는 상대방처럼 fighter_a <> $ fighter_id 또는 fighter_b <> $ fighter_id와 같이해야합니다. – zen

+0

아니요, 전투기 테이블에 가입하십시오. 내 대답을 조금만 수정하겠습니다. 내 대답이 도움이된다면 upvote/accept에 자유롭게 참여하십시오. –

+0

좋습니다. 나는 그것을 줄 것이고 다른 문제가 생기면 반응 할 것이다. 감사! – zen