用于保持列表运行记录的脚本

时间:2013-04-02 17:47:43

标签: php sql list sum

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

一群朋友(爱丽丝,布莱恩,卡罗尔......)每天早上都会打一场篮球比赛,并记录每个人每天得分的数量。他们想知道整个星期每个人的得分总数。

当他们在周一早上比赛时,每位球员的得分是多少分数:

Alice:3

布莱恩:10

卡罗尔:5

其他人:0

这群朋友周二再次参加比赛。以下是分数:

Alice:2

大卫:3

艾美莉:8

其他人:0

他们从周三的比赛得分:

卡罗尔:6

大卫:4

弗兰克:2

其他人:0

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

星期一的预期输出:

  1. Brian(10)
  2. Carol(5)
  3. Alice(3)
  4. 周二的输出:

    1. Brian(10)
    2. Emily(8)
    3. Alice(5)
    4. Carol(5)
    5. 大卫(3)
    6. 周三的输出:

      1. Carol(11)
      2. Brian(10)
      3. Emily(8)
      4. 大卫(7)
      5. Alice(5)
      6. Frank(2)
      7. 如果我将每天的结果放入SQL表中,是否有办法使用SQL或PHP生成每个人总分的排序列表?

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

2 个答案:

答案 0 :(得分: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语句中的逗号)

答案 1 :(得分: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

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