2009-04-29 91 views
1

我有一個高分數據庫,用於追蹤各種世界中每場比賽的比賽。我想要做的是找出關於劇本的一些統計數據,然後找出每個世界根據彼此世界「排名」的位置(按播放次數排序)。MySQL - 優化查詢並根據列查找排名總和

到目前爲止,我已經掌握了所有的統計數據,但是我遇到了發現每個世界排名的問題。

我也很確定在三個單獨的查詢中這樣做可能是一個非常緩慢的方式去解決這個問題,可能可以改進。

我有一個時間戳列(這裏沒有使用)和DB架構中索引的「世界」列。這裏有一個選擇我的來源:

function getStast($worldName) { 
    // ## First find the number of wins and some other data: 
    $query = "SELECT COUNT(*) AS total, 
      AVG(score) AS avgScore, 
      SUM(score) AS totalScore 
      FROM highscores 
      WHERE world = '$worldName' 
      AND victory = 1"; 
    $win = $row['total']; 

    // ## Then find the number of losses: 
    $query = "SELECT COUNT(*) AS total 
      FROM highscores 
      WHERE world = '$worldName' 
      AND victory = 0"; 
    $loss = $row['total']; 

    $total = $win + $loss; 

    // ## Then find the rank (this is the broken bit): 
    $query="SELECT world, count(*) AS total 
      FROM highscores 
      WHERE total > $total 
      GROUP BY world 
      ORDER BY total DESC"; 

    $rank = $row['total']+1; 
    // ## ... Then output things. 
} 

我相信多數民衆贊成失敗我是在RANK查詢代碼的具體行,

   WHERE total > $total 

是它不工作,因爲它不能接受一個計算的總作爲WHERE子句中的一個參數?

最後,是否有更有效的方法來計算單個SQL查詢中的所有這些?

回答

4

我想你可能想用「總計>總計」?

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world 
having total > $total 
ORDER BY total DESC 
+0

還是會遇到同樣的問題? – Louis 2009-04-29 01:17:34