получение i-й-j-й строк в упорядоченном запросе Mysql - PullRequest
0 голосов
/ 11 сентября 2011

предположим, у меня есть этот запрос:

SELECT * FROM t WHERE j = k ORDER BY l

есть ли способ, чтобы запрос возвращал только запрос, например, с 20-й по 40-ю записи в соответствии с оператором ORDER BY, а не возвращал все строки, упорядоченные оператором ORDER BY?

Ответы [ 6 ]

2 голосов
/ 11 сентября 2011
SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20, 20

Предел на 20 (второй), начиная со смещения 20, первый.

1 голос
/ 11 сентября 2011

LIMIT + OFFSET

SELECT * FROM t WHERE j = k ORDER BY l LIMIT 19,21

Примечание:

  • смещение равно нулю, поэтому 19 = начало в строке 20
  • и есть 21 ряд между 20 и 40 включительно
1 голос
/ 11 сентября 2011

Вы искали в документации вообще?

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

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

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

Для совместимости с PostgreSQL MySQL также поддерживает синтаксис LIMIT row_count OFFSET offset.

1 голос
/ 11 сентября 2011

SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20 OFFSET 20;

limit говорит, что вам нужно всего 20 строк, а offset указывает, что вам не нужны первые 20 строк.

Имейте в виду, что когда значение смещения очень велико, ваш запрос будет очень медленным, поскольку серверу sql нужно будет сканировать первые <offset> строки, чтобы вернуть <offset>+<limit> строк.

0 голосов
/ 11 сентября 2011

Есть решение: ВЫБРАТЬ * ОТ t ГДЕ j = k ЗАКАЗАТЬ по l предел 21, 20;(21 - это число строк, а 20 - начальная строка, поэтому вы получите строки с 20-го по 40-й, если они существуют)

0 голосов
/ 11 сентября 2011

http://dev.mysql.com/doc/refman/5.0/en/select.html

sample: SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

так

SELECT * FROM t WHERE j = k ORDER BY l LIMIT 20,20; #retrieve rows 20-40
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...