我一直在进行一系列比赛,获胜者在每场比赛结束时获得一定数量的积分。我正在尝试编写一个生成“排行榜”的脚本 - 基本上,保持各个玩家累积分数的运行记录。我将用一个例子解释我的问题:
一群朋友(爱丽丝,布莱恩,卡罗尔......)每天早上都会打一场篮球比赛,并记录每个人每天得分的数量。他们想知道整个星期每个人的得分总数。
当他们在周一早上比赛时,每位球员的得分是多少分数:
Alice:3
布莱恩:10 卡罗尔:5 其他人:0这群朋友周二再次参加比赛。以下是分数:
Alice:2
大卫:3
艾美莉:8 其他人:0他们从周三的比赛得分:
卡罗尔:6大卫:4
弗兰克:2 其他人:0他们想知道,在每一天结束时,到目前为止得分最高的人,所以他们写了一个脚本来跟踪。每天他们的分数作为输入,这是他们的脚本返回的内容:
星期一的预期输出:
周二的输出:
周三的输出:
如果我将每天的结果放入SQL表中,是否有办法使用SQL或PHP生成每个人总分的排序列表?
提前感谢您的帮助,如果我听到解决方案或自己找到解决方案,我会在此发布,以便人们可以在将来使用它。
答案 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
您需要在点上添加降序排序,以确保电路板正确显示。