Вопрос по mysql, php – MySQL порядок по двум значениям

4

Короче говоря, у меня есть своего рода игра, и табло для нее показывает счет игрока в конце + сколько времени они потратили на ее достижение. Мне нужно упорядочить результаты MySQL таким образом, чтобы самый высокий результат за самое быстрое время был первым, а самый низкий результат за самое медленное время - последним, а все промежуточные значения ранжировались одинаково. Но я понятия не имею, как я это сделаю, вот мой sql в его нынешнем виде:

$sql1 = "SELECT * FROM boobmatch_highscores ORDER BY t_score DESC, time ASC";

Любая помощь будет принята с благодарностью!

Данные в таблице:

Score       Time
23        00:04:32
23        00:04:31
25        00:02:32
16        00:06:32
35        00:04:32
2         00:01:17
-13       00:19:32
-3        00:07:27
Добавлено, как могут выглядеть данные таблицы, время в формате PHP, часы, минуты, секунды AviateX14
время дата или секунды? jcho360
Если вы можете предоставить некоторые примеры данных и то, что вы ожидаете получить (показывая, где могут быть осложнения), это очень поможет нам помочь вам ... Dave Rix
Какие результаты вы получаете против того, что вы ожидаете? Andy♦
Хуже ли то, что первым, что я увидел в этом вопросе, было «Boobmatch»? или что я сразу понял что за игра была? Random Human

Ваш Ответ

6   ответов
-2

просто попробуй

$sql1 = "SELECT * FROM boobmatch_highscores ORDER BY t_score * time DESC";
И победителем становится игрок с самым медленным временем.
1

Вы должны использовать приведенный ниже код. Это работает.

$query = "SELECT field1, field2 from tablename ORDER BY field1 DESC, field2 DESC";
10

Ваш запрос должен работать отлично. Если у вас есть какие-либо проблемы, просто заключите имена полей в кавычки следующим образом:

$sql1 = "SELECT * FROM boobmatch_highscores ORDER BY `t_score` DESC, `time` ASC";

Предполагаю, что это MySQL, иначе кавычки не понадобятся

0

Вы используете этот запрос:

select * from boobmatch_highscores order by time ASC, t_score DESC

Теперь время отображается в порядке возрастания, а счет отображается в порядке убывания.

0

Вы должны использовать целочисленный столбец дляtime вместо varchar,
это означает преобразование00:19:32 до 1172 секунд,
тогда довольно легко для сортировки

0

Я думаю, что это лучшее решение для упорядочения заказа по нескольким значениям.

 SELECT * FROM hotel   
   WHERE confId=13   
   GROUP BY hotelName   
   ORDER BY CASE
   WHEN rating = '5 Star' THEN 1 WHEN rating = '4 Star' THEN 2   
   WHEN rating = '3 Star' THEN 3 WHEN rating = 'BUDGET & EQUIVALENT HOTELS' THEN 4 
 END

Похожие вопросы