Как сделать динамическое смещение пределов, используя только (My) SQL - PullRequest
6 голосов
/ 03 мая 2011

Этот код не работает

select pagenr into @offset from pages where id = 3;
select * from table1 limit @offset*10, 10;

Какой SQL-код мне нужно использовать, чтобы этот код работал
используя только SQL!

Обратите внимание, что

SET SQL_SELECT_LIMIT = @count 

не работает, потому что меня в основном касается смещение, а не предел как таковой.

1 Ответ

4 голосов
/ 03 мая 2011

Из спецификации MySQL 5.5:

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

  • Внутри подготовленных операторов LIMIT параметры могут быть указаны с помощью ? меток-заполнителей.
  • Внутри хранимых программ параметры LIMIT могут быть заданы с использованием целочисленных стандартных параметров или локальных переменных, начиная с MySQL 5.5.6.

Итак, внутри хранимой процедурыбудет работать следующее:

DECLARE offset bigint
SELECT pagenr * 10 INTO offset FROM pages where id = 3;
SELECT * FROM table1 LIMIT offset, 10;

В противном случае вам нужно будет предварительно вычислить значение и передать его через запрос.Вы уже должны знать размер страницы и номер страницы, так что это не должно быть трудным.

...