0

一周前我问了一个相关问题,但这是我面临的另一个问题。我觉得自己像个菜鸟,但我想问和学习总比不学好。

这是我的三个表:

战斗机表

fighter_id, name

事件表

event_id, event_name, event_date

战斗表

fight_id, fighter_a, fighter_b, winner, method, event

所以在fights 表中,fighter_a、fighter_b 和winner 是对应于Fighters 表中的fighter_id 的整数。

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

我正在尝试为该战斗机的每次战斗创建行,其中包括他的对手的名字、结果(赢、输、平或 nc)、方法、event_name 和 event_date。如果是平局或无比赛,它会在方法栏中显示平局或无比赛,而获胜者将为空。

我正在查看这些 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

4

1 回答 1

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
于 2012-06-12T02:33:28.487 回答