我有两张桌子,一张比赛结果列表,一张有ELO评分(基于之前的比赛)。 获取任意竞争的竞争者名单是微不足道的,但我还需要获得最新的评级价值。
得分:
id | eventid | competitorid | position
1 1 1 1
2 1 2 2
3 1 3 3
4 2 2 1
5 2 3 2
6 3 1 1
7 3 3 2
8 3 2 3
的评价:
id | competitorid | rating
1 1 1600
2 2 1500
3 3 1500
4 2 1600
5 3 1590
针对score.eventid = 3的查询的预期输出将是
id | competitorid | position | rating
6 1 1 1600
7 3 2 1590
8 2 3 1600
目前我的代码如下:
SELECT score.scoreID, score.competitorID, score.position,
rating.id, rating.rating
FROM score, rating
WHERE score.competitorid = rating.competitorid
AND score.eventid = 3
ORDER BY score.position
,输出
id | competitorid | position | rating.id | rating
6 1 1 1 1600
7 3 2 2 1500
7 3 2 4 1590
8 2 3 3 1500
8 2 3 5 1600
基本上它显示了该正确事件的得分表中的数据,但是对于该竞争对手的每个可用评级给我一行,遗憾的是我不知道在DISTINCT语句中构建的位置或者如何将其限制为最近的结果
MySQL noob,管理DISTINCT语句,但没有连接。不幸的是,大多数先前的问题似乎都涉及从单个表中获得不同的结果,这不是我所追求的。谢谢!
答案 0 :(得分:1)
获得评级的一种方法是使用相关子查询:
SELECT s.scoreID, s.eventID, s.competitorID, s.position,
(select r.rating
from rating r
where s.competitorID = r.competitorID
order by r.id desc
limit 1
) as rating
FROM score s
WHERE s.eventID = 3
ORDER BY s.position;
我不确定ratingprid
是什么,所以这只包括评级。