Domanda

Ho un database di punteggi elevati per un gioco che tiene traccia di ogni gioco in una varietà di mondi. Quello che voglio fare è scoprire alcune statistiche sulle opere teatrali, e quindi scoprire dove ogni mondo "classifica" " secondo l'altro mondo (ordinati per numero di volte giocate).

Finora ho funzionato bene tutte le mie statistiche, tuttavia ho riscontrato un problema nel trovare la classifica di ciascun mondo.

Sono anche abbastanza sicuro che farlo in tre query separate sia probabilmente un modo molto lento per farlo e probabilmente potrebbe essere migliorato.

Ho una colonna timestamp (non utilizzata qui) e il "mondo" colonna indicizzata nello schema DB. Ecco una selezione della mia fonte:

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.
}

Credo che la specifica riga di codice che mi manca sia nella query RANK

              WHERE total > $total

Non funziona perché non può accettare un totale calcolato come argomento nella clausola WHERE?

Infine, esiste un modo più efficiente per calcolare tutto questo in una singola query SQL?

È stato utile?

Soluzione

Penso che potresti voler usare 'have total > $ Totale '?

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world
having total > $total
ORDER BY total DESC
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top