MySQL- 쿼리 최적화 및 열 합계에 따라 순위를 찾으십시오.
-
03-07-2019 - |
문제
다양한 세계에서 모든 플레이를 추적하는 게임에 대한 높은 점수 데이터베이스가 있습니다. 내가하고 싶은 것은 연극에 대한 몇 가지 통계를 찾은 다음 각 세계가 서로 세계에 따라 "순위가"(횟수로 정렬)를 찾는 것입니다.
지금까지 나는 모든 통계가 잘 작동했지만 각 세계의 순위를 찾는 데 문제가 발생했습니다.
나는 또한 세 가지 별도의 쿼리로 이것을하는 것이 아마도 이것에 대해 매우 느리게 진행할 수 있으며 아마도 개선 될 수 있다고 확신합니다.
타임 스탬프 열 (여기서 사용되지 않음)과 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
제휴하지 않습니다 StackOverflow