Как работает оператор LIMIT в MySQLi и правильно ли он функционирует?

Вопрос таков: В таблице имеется 100 записей, ограничение LIMIT задается значениями "12, 10" или "65, 10", что означает, что мы запрашиваем записи, которых нет. Вместо пустого массива запрос возвращает последние 10 записей. Правильно ли такое поведение или массив должен вернуться пустым?
  • 8 октября 2023 г. 10:47
Ответы на вопрос 2
Оператор LIMIT в MySQLi используется для ограничения количества выбираемых записей из таблицы. Он принимает два параметра: смещение и количество строк. 

Например, в запросе "SELECT * FROM table LIMIT 12, 10" означает, что будет выбрано 10 строк, начиная с 13-й строки (смещение 12). 

В запросе "SELECT * FROM table LIMIT 65, 10" будут выбраны 10 строк, начиная с 66-й строки (смещение 65).

Если в таблице меньше, чем указанное количество строк, то возвращаются все доступные строки. Таким образом, если вы запрашиваете строки, которых нет, то возвращаются последние доступные строки.

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

Однако, если вам важно получить пустой массив, если нет доступных строк, вы можете проверить количество возвращенных строк после выполнения запроса и обработать результат соответствующим образом в вашем коде.
LIMIT не является номером среза данных в MySQL. Оно определяет количество строк, которые будут пропущены перед выводом результатов. Например, LIMIT 65, 10 означает, что нужно пропустить 65 строк и вывести следующие 10 строк, начиная с 66-ой строки.

Пример использования LIMIT можно посмотреть здесь: [ссылка на пример](https://sqlize.online/s/l2).

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

Также можно использовать синтаксис OFFSET:
```sql
SELECT *
FROM tbl
ORDER BY ...
LIMIT 10 OFFSET 40
```

Более подробную информацию можно найти здесь: [ссылка на документацию](https://sqlize.online/sql/mariadb/f79285496f750423)
Похожие вопросы