2009-09-29 4 views
16

В MySQL, как я могу получить ВСЕ строки в таблице, начиная с строки X? Например, начиная с 6-й строке:Как получить ВСЕ строки, начиная с строки x в MySQL

LIMIT 5,0 

Это ничего не возвращает, поэтому я попытался это:

LIMIT 5,ALL 

Еще нет результатов (ошибка SQL).

Я не ищу функциональность разбиения на страницы, просто получая все строки, начиная с определенной строки. LIMIT 5,2000 Кажется, что это излишний. Почему-то Google, похоже, не дает мне ответов. Надеюсь, ты поможешь.

Благодаря

ответ

30

Согласно documentation:

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

SELECT * FROM tbl LIMIT 95, 18446744073709551615; 

Это maximum rows a MyISAM table can hold, 2^64-1.

В таблице MyISAM существует ограничение на 2^32 (~ 4.295E + 09) строк. Если вы создаете MySQL с опцией --with-big-tables, ограничение строки увеличивается до (2^32)^2 (1,844E + 19) строк. См. Раздел 2.16.2, «Типичные параметры настройки». Бинарные дистрибутивы для Unix и Linux построены с этой опцией.

+1

Спасибо, Грег, ваш ответ не может быть более полным :) – SolidSmile

+1

Хороший ответ, я изменил ручную ссылку, чтобы перейти в нужную точку на странице и удалил мой в основном дублированный ответ :) –

0

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

3

Если вы хотите получить последнее количество х строк, то самое простое - SORT DESC и LIMIT на . Сначала x строк. Конечно, SORT замедлит ваш запрос. Но если вы возражаете против установки произвольно большого числа в качестве второго LIMIT arg, то это способ сделать это.

+2

Может кто-нибудь объяснить, почему этот ответ занижен? –

-1

Следующий запрос также должен работать, и на мой взгляд, более эффективным ...

SELECT * FROM mytbl WHERE id != 1 ORDER BY id asc 

Заказав запрос будет найти идентификатор imediately и пропустить этот, так что последующие строки, он не будет проверьте, равен ли id = 1.

0

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