#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. Спасибо. Похоже, это работает очень хорошо.