2
我有我想要的結果表格中顯示:什麼是查詢位置變化的最佳方式?
| change | position | name | score |
|----------------------------------|
| - | 1 | Bob | 10 |
| +1 | 2 | Tom | 8 |
| -1 | 3 | Sam | 7 |
|----------------------------------|
變化欄反映的是人的位置移動,所以從第3移動到第二點是+1,並從第二移動到第三是-1等。因此在上面的例子中,自從上一場比賽Tom取代Sam之後。
我可以編寫一個提供結果(包括「更改」列)的單個SQL語句嗎?
現在我正在寫兩個查詢來做到這一點。我得到不包括最新遊戲的分數,然後獲得包括最新遊戲在內的分數,並在繪製表格時進行比較。
實施例:
上一頁遊戲結果:
SELECT p.name, p.id, SUM(g.points) AS score
FROM players p INNER JOIN games g ON p.id=g.player_id
WHERE g.id<5
ORDER BY score DESC
然後,在一個數組中存儲這些:
$i=1;
while($row = mysql_fetch_assoc($results){
$prevPositions[$row['id']] = $i++;
//render row
}
所有遊戲結果:
SELECT p.name, SUM(g.points) AS score
FROM players p INNER JOIN games g ON p.id=g.player_id
ORDER BY score DESC
然後制定出的不同渲染表時:
$i=1;
while($row = mysql_fetch_assoc($results){
$change = $prevPositions[$row['id']] - $i++;
//render row
}
這工作得很好 - 但我覺得更好,如果我可以只使用一個聲明,而不是兩個。
我不會要測試上面,直到下週的機會,但感謝您的建議。 – Vamos 2009-10-22 12:04:33