LIMIT

LIMIT может быть использован для ограничения количества строк, возвращаемых оператором SELECT. LIMIT принимает один или два числовых аргумента, которые оба должны быть неотрицательны целочисленные константы (except when using prepared statements).

https://dev.mysql.com/doc/refman/8.0/en/limit-optimization.html

Получить 10 строк, начиная с 6-й

Из двух аргументов, первый аргумент определяет смещение от первой строки, второй - определяет максимальное количество возвращаемых строк. Смещение от начального ряда равно 0.

SELECT * FROM tbl LIMIT 5, 10;  # возвратит строки 6-15

Чтобы получить все строки от определенного смещения до конца результирующего набора, вы можете использовать некоторое большое число для второго параметра. Это выражение извлекает все строки от 96-й до последней:

SELECT * FROM tbl LIMIT 95, 18446744073709551615;

Получить первые n строк

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

SELECT * FROM tbl LIMIT n;

Другими словами, LIMIT n эквивалентно LIMIT 0, n

mysql> SELECT * FROM city LIMIT 5;
+-----+-------------------------------+---------------------+
| cid | cname                         | dateup              |
+-----+-------------------------------+---------------------+
|   1 | Киев                          | 2014-09-28 03:18:53 |
|   2 | Харьков                       | 2014-09-28 03:18:53 |
|   3 | Днепр                         | 2014-09-28 03:18:53 |
|   4 | Львов                         | 2014-09-28 03:18:53 |
|   5 | Одесса                        | 2014-09-28 03:18:53 |
+-----+-------------------------------+---------------------+
5 rows in set (0.03 sec)

Вывести последние n cтрок

Если таблица tbl проиндексирована по полю id от меньшего к большему (ASC), то

SELECT * FROM tbl ORDER BY id DESC LIMIT n;
mysql> SELECT * FROM city ORDER BY cid DESC LIMIT 5;
+-----+------------------------------------------------------------------+---------------------+
| cid | cname                                                            | dateup              |
+-----+------------------------------------------------------------------+---------------------+
| 189 | Керчь                                                            | 2014-11-13 02:55:51 |
| 188 | Иванков                                                          | 2014-11-13 02:55:51 |
| 187 | Гуляйполе                                                        | 2014-11-13 02:55:51 |
| 186 | Ирпень                                                           | 2014-11-13 02:55:51 |
| 185 | Харцызск                                                         | 2014-11-13 02:55:51 |
+-----+------------------------------------------------------------------+---------------------+
5 rows in set (0.06 sec)

Еще немного про это

Как выбрать произвольные записи из таблицы

SELECT * FROM tbl ORDER BY RAND() LIMIT n;

⚠️ Не спешите применять такой запрос на больших данных! см. здесь

mysql> SELECT * FROM city ORDER BY RAND() LIMIT 7;
+-----+--------------------------------------+---------------------+
| cid | cname                                | dateup              |
+-----+--------------------------------------+---------------------+
| 180 | Павлодар                             | 2014-10-13 11:18:24 |
|   7 | Житомир                              | 2014-09-28 03:18:53 |
| 203 | Каховка                              | 2014-11-13 02:55:54 |
|  51 | Каменское                            | 2014-09-28 03:39:33 |
| 116 | Воронеж                              | 2014-09-30 06:48:22 |
| 185 | Харцызск                             | 2014-11-13 02:55:51 |
|  70 | Макеевка                             | 2014-09-28 11:11:26 |
+-----+--------------------------------------+---------------------+
7 rows in set (0.01 sec)

LIMIT з кінця таблиці

Робимо підзапит, де вибираємо дані у зворотньому порядку з необхідним лімітом. Потім виводимо дані цієї виборки у необхідному порядку.

SELECT * FROM ( SELECT id, field1, field2, ...
                FROM tab1 ORDER BY id DESC LIMIT 20 ) AS subquery ORDER BY id;

Часто порядок не має значення, а треба лише подивитися останні додані дані. Тоді достатньо такого простого запиту:

SELECT id, field1, field2, ... FROM tab1 ORDER BY id DESC LIMIT 20;

Last updated