【发布时间】:2012-06-12 22:55:31
【问题描述】:
这是this question from yesterday 的延续。
这是我的三张桌子:
格斗桌
fighter_id | name
-----------------------
1 | John
2 | Steve
3 | Bill
4 | Bobby
事件表
event_id | event_name | event_date
-------------------------------------------
1 | MMA | 01/01/2010
2 | Cool | 02/20/2010
3 | Yeaa! | 04/15/2010
格斗桌
fight_id | fighter_a | fighter_b | winner | method | event
-----------------------------------------------------------------------
1 | 1 | 2 | 1 | Sub | 1
2 | 4 | 1 | 4 | KO | 2
3 | 1 | 3 | NULL | Draw | 3
尝试获取的结果
result | opponent | method | event | date
----------------------------------------------------------
Draw | Bill | Draw | Yeaa! | 04/15/2010
Loss | Bobby | KO | Cool | 02/20/2010
Win | Steve | Sub | MMA | 01/01/2010
所以在fights表中,fighter_a、fighter_b和winner是对应于Fighters表中的fighter_id的整数。
我基本上是在基于 fighter_id ($fighter_id) 检索数据的页面上。
我正在尝试为该战士的每场战斗创建行,其中包括他的对手的名字、结果(胜利、失败、平局或 nc)、方法、事件名称和事件日期。挑战在于获胜者可以在 fighter_a 或 fighter_b 中。它并不总是在同一列中。我很感激能得到任何帮助。
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
WHERE
fighter_a=$fighter_id OR fighter_b=$fighter_id
ORDER BY
event_date DESC
【问题讨论】:
-
事件表没有连接。您如何在 event_date 之前订购?
-
呃,是的,对不起。这是一种痛苦。我的三个主表设置正确吗?现在检索这些数据似乎是一个 PITA。 :(
标签: mysql relational-database relational