MySQL查询中更复杂的IF语句

时间:2012-06-12 02:15:02

标签: mysql relational-database

一周前我问了一个相关的问题,但这是我面临的另一个问题。我觉得这样一个菜鸟,但我想最好还是学习,而不是学习。

以下是我的三个表:

战士表

fighter_id, name

活动表

event_id, event_name, event_date

战斗表

fight_id, fighter_a, fighter_b, winner, method, event

因此在战斗表中,fighter_a,fighter_b和winner是与Fighters表中的fighter_id相对应的整数。

我基本上是在基于fighter_id检索数据的页面上。

我正在尝试用该战斗机的每次战斗创建行,包括他的对手的名字,结果(胜利,失败,平局或者nc),方法,event_name和event_date。如果它是抽奖或没有比赛,它将在方法列中显示抽奖或没有比赛,而获胜者将为NULL。

我正在查看这些MySQL IF语句,并创建了什么是确定战斗机是赢了,输了,抽签还是没有比赛的适当标准。似乎这些语句不能在PHP mysql_query中使用,但至少它可以让您了解标准。我知道我必须将这三张桌子加在一起,但我不确定如何确定胜利者/输家/等等......因为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 个答案:

答案 0 :(得分: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