我有一个名为times with fields
的表MapID | Type | Style | PlayerID | Time | Points
较低次(时间)的玩家(PlayerID)必须比较高次的玩家拥有更多积分。基本上,如果我有两个PlayerID: PlayerID 3的时间为10.1秒,PlayerID 4的时间为10.3秒,PlayerID 3的得分为2,而PlayerID 4的得分为1,因为PlayerID 3的时间更长。如果有4个玩家ID,则具有第一名时间的玩家将获得4分,并且下一个最高时间点数将下降1。这只是基本上反向排名,其中顶级时间在某种意义上而不是排名1中获得最高排名。
这一切必须在一个声明中的原因是因为在我创建我的程序的语言中是Sourcepawn,它不允许查询的分隔符(;)。我提到子类别的原因是MapID,Type,Style的每个组合都是它自己的子类别。
这是一张更容易解释我的问题的图片:http://i.imgur.com/W8d90P4.png 我只想根据MapID,Type,Style和Time命令对这些点进行分类 在使用SQLite之前,我确实提出了一个解决方案:
UPDATE times
SET Points = (
SELECT t1.Rank
FROM (
SELECT t1.id, count(*) AS Rank
FROM times AS t1, times AS t2
WHERE t1.MapID=t2.MapID
AND t1.MapID=%d
AND t1.Type=t2.Type
AND t1.Type=%d
AND t1.Style=t2.Style
AND t1.Style=%d
AND t1.Time <= t2.Time
GROUP BY t1.PlayerID
ORDER BY t1.Time
) AS t1
WHERE t1.id=times.id
)
WHERE MapID=%d AND Type=%d AND Style=%d