更复杂的IF MySQL查询中的语句(More complex IF statements with

2019-10-31 18:52发布

我问一个相关的问题一个星期前,但这里是我面临的另一个问题。 我觉得像这样的小白,但我想这是最好问和学习,而不是永远也学不会。

这里是我的三个表:

战士表

fighter_id, name

事件表

event_id, event_name, event_date

战斗表

fight_id, fighter_a, fighter_b, winner, method, event

所以在打架表,fighter_a,fighter_b和赢家是对应于战斗机表fighter_id整数。

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

我试图与战斗机,其中包括他的对手的名字,结果(赢,损失,画,或NC),方法,EVENT_NAME和EVENT_DATE的每次吵架创建行。 如果是平局或没有比赛,它会说画或方法列没有比赛,而获胜者将是NULL。

我看着这些MySQL的IF语句,并创造了什么是合适的标准,以确定一个战士是否赢了,输了,拿到一场平局,或没有比赛。 它似乎并不像这些语句可以在PHP的mysql_query中使用,但至少它给你的标准的想法。 我知道我必须内部连接这3个表在一起,但我不知道如何确定赢家/失败者的/ etc ...因为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

Answer 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


文章来源: More complex IF statements within MySQL query