2013-04-02 36 views
0

我一直在運行一系列的遊戲,在每場比賽結束時獲勝者獲得一定數量的積分。我試圖編寫一個腳本來生成一個「排行榜」 - 本質上,可以保持各玩家的累積分數。我會用一個例子來解釋我的問題:腳本來保持列表的運行狀態

一羣朋友(愛麗絲,布萊恩,卡羅爾......)每天早上都會打籃球,跟蹤每個人每天得分多少分。他們想知道在整個一週中每個人總共得分多少分。

當他們打在星期一早上,這裏的每個球員多少分的得分:

愛麗絲:3

布萊恩:10

卡羅爾:5

其他人:0

這羣朋友星期二再次參加比賽。以下是評分:

愛麗絲:2

大衛:3

艾米麗:8

其他人:0

而且他們的成績從週三的比賽:

卡羅爾:6

David:4

弗蘭克:2

其他人:0

他們想知道,在每一天,至今已誰得的多數分,所以他們寫一個腳本來跟蹤結束。隨着他們的得分作爲輸入的每一天,這裏就是他們的腳本返回:

週一的期望輸出:

  1. 布萊恩(10)
  2. 卡羅爾(5)
  3. 愛麗絲(3)

星期二的輸出:

  1. Brian(10)
  2. 艾米莉(8)
  3. 愛麗絲(5)
  4. 卡羅爾(5)
  5. 大衛(3)

和週三的輸出:

  1. 卡羅爾(11)
  2. Brian(10)
  3. Emily(8)
  4. 大衛(7)
  5. 愛麗絲(5)
  6. 弗蘭克(2)

如果我把每一天的結果到一個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語句中的逗號)

+0

謝謝約翰!最後一個問題,有沒有辦法讓輸出按總分數排序? (就像在你的例子中的輸出一樣,在Alice 4之前顯示Bob 5) – Linearts

+0

完全錯過了你的問題的那一部分,抱歉。我認爲,最簡單的辦法是 'SELECT名字,SUM(得分)AS total_score'' 從表'' GROUP BY的名字'' ORDER BY total_score' 這裏的關鍵是 「ORDER BY」聲明 – John

+0

好吧,我今晚將實施這個,將其發佈到網頁上,並編輯問題鏈接,以便人們可以看到一切如何運作。謝謝!編輯:我會upvote你,但顯然我沒有足夠的聲譽,對不起=/ – Linearts

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 

您需要在點上添加降序排序以確保電路板正確顯示。

+0

這不會給每一天的結果,即使在晚些時候?如果他們已經打過週三的比賽,我不需要知道週一的比賽是誰。我只想在一天結束時運行腳本,並獲得所有到目前爲止所有遊戲的總數。 – Linearts

+0

最後三條select語句是示例,顯示每天會發生什麼。問題是如何做到這一點,這是爲了展示如何。我會期望每天都會替換一天,而不是按原樣運行腳本。如果你離開日期,它會給你跑步總數 – David