У меня есть база данных с высокими баллами для игры, которая отслеживает каждую игру в разных мирах. То, что я хочу сделать, это узнать некоторые статистические данные о пьесах, а затем найти, где каждый мир «покоится» в соответствии друг с другом (отсортировано по количеству раз).MySQL - Оптимизация запроса и поиск ранга на основе столбца Сумма
До сих пор у меня есть все мои статистические данные, но я столкнулся с проблемой определения рейтинга каждого мира.
Я также уверен, что делать это в трех отдельных запросах - это, вероятно, очень медленный способ сделать это и, вероятно, можно улучшить.
У меня есть метка времени (не используется здесь) и столбец «world», индексированный в схеме 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-запросе?
, или это приводит к тому же вопросу? – Louis
Ошибки «Неверный SQL-синтаксис» на обоих «где» и «есть» :( –
исправлено, это то, что вы использовали? – Louis