Как получить ВСЕ строки, начиная с строки x в MySQL

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

LIMIT 5,0

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

LIMIT 5,ALL

До сих пор нет результатов (ошибка sql).

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

Спасибо


person SolidSmile    schedule 29.09.2009    source источник


Ответы (5)


Согласно документации:

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

SELECT * FROM tbl LIMIT 95, 18446744073709551615;

Это максимальное количество строк, которое может содержать таблица MyISAM, 2^64-1.

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

person Greg    schedule 29.09.2009
comment
Спасибо, Грег, ваш ответ не может быть более полным :) - person SolidSmile; 29.09.2009
comment
Хороший ответ, я подправил ссылку вручную, чтобы она переходила в нужную точку на странице, и удалил мой в значительной степени дублированный ответ :) - person Paul Dixon; 29.09.2009

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

person dnagirl    schedule 29.09.2009
comment
Вероятно, потому что это не то, о чем просил SolidSmile. Он не знал последних х строк. Он знал первые x строк. Итак, этот ответ решает другую проблему. - person Patrik Neperfekta; 24.10.2018

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

person Alistair Evans    schedule 29.09.2009

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

person Javid Ahadov    schedule 27.09.2016

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

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

Упорядочив запрос, он сразу найдет идентификатор и пропустит этот, поэтому в следующих строках он больше не будет проверять, равен ли идентификатор = 1.

person Jake    schedule 20.05.2013