一周前我问了一个相关的问题,但这是我面临的另一个问题。我觉得这样一个菜鸟,但我想最好还是学习,而不是学习。
以下是我的三个表:
战士表
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
答案 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