Mysql застрял с order by desc и limit

#mysql #sql

#mysql #sql

Вопрос:

У меня есть таблица, подобная этой:

 "id"    "UserName"  "score"
"1"     "User 1"    "2"
"2"     "User 2"    "5"
"3"     "User 3"    "3"
"4"     "User 4"    "7"
"5"     "User 5"    "1"
  

и запустите sql, подобный этому:

 select userName from stack where id >= 0 order by score DESC LIMIT 3
  

Это дает мне результат

 "userName"
"User 4"
"User 2"
"User 3"
  

Что означает, что он устроен так;

 "id"    "UserName"  "score"
"4"     "User 4"    "7"
"2"     "User 2"    "5"
"3"     "User 3"    "3"
"1"     "User 1"    "2"
"5"     "User 5"    "1"
  

Как я могу начать с id 1 и получить результаты, как показано ниже. Потому что независимо от того, что я делаю, я продолжаю получать неправильные результаты:

Ожидаемые результаты:

 select userName from stack where id >= 1 order by score DESC LIMIT 3

"1" "User 1"    "2" /*These are my expected results and not what the above query outputs*/
"5" "User 5"    "1"
  

Все это происходит из системы разбивки на страницы, которую мы используем для отображения пользователей на основе их оценок.

Комментарии:

1. Зачем начинать с пользователя 1 (id 1), если у него / нее нет наивысшего балла (order by score desc)? Если вы хотите, чтобы пользователь 1 все время набирал первое место, а затем следующие 3 по величине, тогда вам нужно запустить 2 выбора и использовать ОБЪЕДИНЕНИЕ. Удачи.

2. Вы хотите получить следующие три? В этом случае вы хотите SELECT userName FROM stack ORDER BY score DESC LIMIT 3,3

3. @Grim… Первый набор — пользователь 4, 2, 3. Таким образом, следующий набор будет начинаться с 1, поэтому это будут пользователи 1 и 5. 3 результата на странице. 4,2,3 — первые, 1 и 5 будут на странице 2

Ответ №1:

Вы можете использовать смещение в ПРЕДЕЛЕ:

 select userName from stack where id >= 1 order by score DESC LIMIT 3,3
  

Для вашей разбивки на страницы вы должны увеличивать смещение для каждой страницы.

Комментарии:

1. Я бы предположил, что >=1 это довольно излишне.

2. Итак, что здесь должно было бы постоянно меняться? Второе число после ,

3. Нет, первое число. LIMIT [offset],[returned rows]

4. Спасибо. Похоже, это работает очень хорошо.