0

我一直在运行一系列游戏,获胜者在每场比赛结束时获得一定数量的积分。我正在尝试编写一个生成“排行榜”的脚本 - 从本质上讲,它会记录各种玩家的累积分数。我将用一个例子来解释我的问题:

一群朋友(爱丽丝、布赖恩、卡罗尔……)每天早上打篮球,并记录每个人每天得了多少分。他们想知道每个人在整个一周内总共得了多少分。

当他们在周一早上比赛时,每个球员的得分如下:

爱丽丝:3

布赖恩:10

卡罗尔:5

其他人:0

这群朋友周二又玩了。以下是分数:

爱丽丝:2

大卫:3

艾米丽:8

其他人:0

以及他们在周三比赛中的得分:

卡罗尔:6

大卫:4

弗兰克:2

其他人:0

他们想知道,在每天结束时,到目前为止谁得分最高,所以他们编写了一个脚本来跟踪。以他们每天的分数作为输入,以下是他们的脚本返回的内容:

星期一的期望输出:

  1. 布赖恩 (10)
  2. 卡罗尔 (5)
  3. 爱丽丝 (3)

周二的输出:

  1. 布赖恩 (10)
  2. 艾米丽 (8)
  3. 爱丽丝 (5)
  4. 卡罗尔 (5)
  5. 大卫 (3)

周三的输出:

  1. 卡罗尔 (11)
  2. 布赖恩 (10)
  3. 艾米丽 (8)
  4. 大卫 (7)
  5. 爱丽丝 (5)
  6. 弗兰克 (2)

如果我把每天的结果放到一个 SQL 表中,有没有办法使用 SQL 或 PHP 来生成每个人总分的排序列表?

提前感谢您的帮助,如果我听到解决方案或自己找到解决方案,我会在这里发布,以便人们将来使用它。

4

2 回答 2

0

如果 SQL 表设置如下:

name    day    score
Alice   M      2
Bob     M      3
Carol   M      1
Alice   T      2
Bob     T      4
David   T      1
etc...

那么你的 SQL 代码将是

SELECT name, SUM(score) FROM table GROUP BY name

如果您无法通过代码破译,这将给出如下内容:

name    score
Alice   4 (or whatever it actually is)
Bob     5 (or whatever...)
etc...

(编辑:在 SQL 语句中忘记了逗号)

于 2013-04-02T17:58:02.277 回答
0
DROP TABLE #TempTest
CREATE TABLE #TempTest (
        ID int IDENTITY(1,1)
        ,Name varchar(10)
        ,Points int
        ,MatchDate datetime
        )

INSERT INTO #TempTest (Name,Points,MatchDate)
SELECT 'Alice',3,'1/1/2013'
UNION
SELECT  'Brian',10,'1/1/2013'
UNION
SELECT 'Carol',5,'1/1/2013'
Union
SELECT 'Alice',2,'1/2/2013'
UNION
SELECT  'David',3,'1/2/2013'
UNION
SELECT 'Emily',8,'1/2/2013'
UNION
SELECT 'Carol',6,'1/3/2013'
UNION
SELECT  'David',4,'1/3/2013'
UNION
SELECT 'Frank',2,'1/3/2013'

SELECT * FROM #TempTest

SELECT Name,SUM(Points) AS TotalPoints FROM #TempTest
WHERE MatchDate <='1/1/2013'
GROUP BY Name
ORDER BY SUM(Points) DESC

SELECT Name,SUM(Points) AS TotalPoints FROM #TempTest
WHERE MatchDate <='1/2/2013'
GROUP BY Name
ORDER BY SUM(Points) DESC

SELECT Name,SUM(Points) AS TotalPoints FROM #TempTest
WHERE MatchDate <='1/3/2013'
GROUP BY Name
ORDER BY SUM(Points) DESC

您需要在点上添加降序排序,以确保板正确显示。

于 2013-04-02T18:07:06.480 回答