Pregunta

Tengo una base de datos de puntaje alto para un juego que rastrea cada jugada en una variedad de mundos. Lo que quiero hacer es encontrar algunas estadísticas sobre las jugadas, y luego encontrar dónde clasifica cada mundo " " " según el mundo del otro (ordenados por el número de veces que se juegan).

Hasta ahora tengo todas mis estadísticas funcionando bien, sin embargo, me he encontrado con un problema para encontrar la clasificación de cada mundo.

También estoy bastante seguro de que hacer esto en tres consultas separadas es probablemente una forma muy lenta de hacerlo y probablemente podría mejorarse.

Tengo una columna de marca de tiempo (no se usa aquí) y el " mundo " columna indexada en el esquema de base de datos. Aquí hay una selección de mi fuente:

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

Creo que la línea específica de código que me está fallando está en la consulta RANK,

              WHERE total > $total

¿No funciona porque no puede aceptar un total calculado como un argumento en la cláusula WHERE?

Finalmente, ¿existe una manera más eficiente de calcular todo esto en una sola consulta SQL?

¿Fue útil?

Solución

Creo que es posible que desee utilizar 'tener total > $ total '?

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world
having total > $total
ORDER BY total DESC
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top