문제

다양한 세계에서 모든 플레이를 추적하는 게임에 대한 높은 점수 데이터베이스가 있습니다. 내가하고 싶은 것은 연극에 대한 몇 가지 통계를 찾은 다음 각 세계가 서로 세계에 따라 "순위가"(횟수로 정렬)를 찾는 것입니다.

지금까지 나는 모든 통계가 잘 작동했지만 각 세계의 순위를 찾는 데 문제가 발생했습니다.

나는 또한 세 가지 별도의 쿼리로 이것을하는 것이 아마도 이것에 대해 매우 느리게 진행할 수 있으며 아마도 개선 될 수 있다고 확신합니다.

타임 스탬프 열 (여기서 사용되지 않음)과 DB 스키마에서 인덱스 된 "World"열이 있습니다. 내 출처의 선택은 다음과 같습니다.

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

나는 실패한 특정 코드 라인이 순위 쿼리에 있다고 생각합니다.

              WHERE total > $total

WHERE 절에서 계산 된 총계를 인수로 받아 들일 수 없기 때문에 작동하지 않습니까?

마지막으로 단일 SQL 쿼리 에서이 모든 것을 계산하는보다 효율적인 방법이 있습니까?

도움이 되었습니까?

해결책

'총 총> $ 총계'를 사용하고 싶을 것 같습니까?

SELECT world, count(*) AS total 
FROM highscores 
GROUP BY world
having total > $total
ORDER BY total DESC
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top