Slash-Zn
@Slash-Zn

Объясните за LIMIT — правильно ли работает?

Когда параметр LIMIT использует два значения, например: "LIMIT 7, 10". Оба значения позволяют получить срез данных, первый - это начало среза (порядковый номер среза), второй - это количество записей. Это понятно. Вопрос мой такой: Допустим в таблице имеется 100 записей, а LIMIT имеет значения: "120, 10", то есть мы пытаемся получить записи, которых нет. По сути, запрос должен вернуть пустой массив, но запрос возвращает последние 10 записей. Даже, если LIMIT будет такой: "650, 10" я получу последние 10 записей, а не пустой массив.

это так и должно быть, или массив все таки должен вернуться пустым?
  • Вопрос задан
  • 101 просмотр
Решения вопроса 2
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
LIMIT - это никакой не номер среза! (MySQL понятия не имеет о ваших срезах)
LIMIT - это количество строк в выдаче которое будет пропущено, то есть LIMIT 65, 10 означает - возьми все строки и выдай 10 строк начиная с 66-ой строки

Пример: https://sqlize.online/s/l2

Если вам нужна пагинация, то разбиение на страницы придется делать самостоятельно. Например 5-я страница из 10 строк будет выбираться так:
SELECT *
FROM tbl
ORDER BY ...
LIMIT 40, 10

так же можно применять синтаксис OFFSET:
SELECT *
FROM tbl
ORDER BY ...
LIMIT 10 OFFSET 40

https://sqlize.online/sql/mariadb/f79285496f750423...
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
limit штука простая. LIMIT [offset,] row_count означает, что запросу нужно прочитать offset + row_count строк из результата запроса, затем отбросить первые offset найденных строк и вернуть то что осталось. Вот и вся логика. Если после откидывания offset строк в результате не осталось - будет возвращено пустое множество.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы