У меня есть таблица, в которой записываются оценки пользователей в игре (пользователь может отправить 5,10,20, столько же очков, сколько он хочет). Мне нужно показать 20 лучших результатов в игре, но для каждого пользователя. (Как пользователь может отправить например, 4 баллов, которые сверху согласно оценкам других пользователей в) Запрос я написал это:Запрос Sql имеет нежелательные результаты. Где проблема?
SELECT DISTINCT
`table_highscores`.`userkey`,
max(`table_highscores`.`score`),
`table_users`.`username`,
`table_highscores`.`dateachieved`
FROM
`table_highscores`, `table_users`
WHERE
`table_highscores`.`userkey` = `table_users`.`userkey`
AND
`table_highscores`.`gamekey` = $gamekey
GROUP BY
`userkey`
ORDER BY
max(`table_highscores`.`score`) DESC,
LIMIT 0, 20;
В результате выход нормально, но есть проблема. Когда я вычисляю разницу дней (сегодня - это dateachieved
), результат неверен. (например, вместо того, чтобы говорить «оценка была отправлена 22 дня назад, она говорит 43 дня назад) Итак, я должен сделать второй запрос для каждого балла, чтобы найти истинную дату (что означает +20 запросов). Есть ли более короткий путь найти правильную дату? Спасибо.
Вы абсолютно прав, это запрос, который имеет «нежелательные» результаты или ваш расчет выключен? Что означает 'dateachieved' (DATETIME?) И как вы вычисляете разницу? Для меня, похоже, проблема не имеет ничего общего с самим запросом. –
Возможно ли, чтобы пользователь подавал одинаковый высокий балл более одного раза в разные даты?Если существует несколько дат с одинаковой максимальной оценкой, вы хотите, чтобы дата была самой старой или самой последней? –