singlepost

Постраничная навигация без LIMIT << На главную или назад  

постраничную навигацию с mySQL можно легко сделать используя в запросе LIMIT, но по сведениям 2006 года, LIMIT есть только в mySQL.

Без LIMIT можно получать все записи и ограничивать вывод средствами PHP, но это не хорошо.

Еще можно написать какой нибудь сложный запрос.

Вообщем, как делают постраничную навигацию в других СУБД?

22 ответов в теме “Постраничная навигация без LIMIT”

  1. 20
    Леонид Максимов ответил:

    mysql в принципе можно и на несколько серверов развесить, так что не все так плохо.

  2. 19
    Олег Замазеев ответил:

    НуMySQL просто умрет на большой БД :) ) Ну не предназначен он для таких объемов :) ))
    А студии предпочитают использовать свои CMS в нескольких случаях, во-первых Joomla и многие подобные ей, не бесплатны для коммерческого использования, во-вторых потому, что кто-то им так присоветовал, в-третьих из-за стереотипов, что своя лучше :) , в-четвертых так престижнее , и т.д. Причин может быть масса. Но основная потому, что так выгоднее, за свою можно бабла срубить больше :) )

  3. 18
    Quizful Team ответил:

    на Оракле можно не указывать ограничение. там при получении ResultSet соединение держит курсор, можно ограничить порцию данных (по крайней мере в JDBC) до кол-ва записей на странице и просто выполнить запрос, а потом по порядку вытаскивать данные, пока не достигнем нужного количества записей.

  4. 17
    Алексей Макаров ответил:

    Собсно я ее уже написал =)
    Затрачено примерно 30-40 дней. Модульная архитектура, можно легко делать сайты. Писал я ее для одной web-студии и своего диплома.
    Кстати, почему web-студии предпочитают использовать свои CMS, вместо Joomla например?
    И почему MySQL лучше не использовать с большими БД?
    Я читал что MySQL быстрее и первоначально создавалась для больших БД.

  5. 16
    Олег Замазеев ответил:

    MySQL хорош, но когда БД весит несколько гигов, тогда либо Oracle либо MS SQL. А насчет своей CMS ты подумай, а стоит ли изобретать велосипед? Конечно если ты не пишешь комерческий продукт. Одному ой как долго писать, не раз наступить на грабли предеться, решить кучу задач, которые до тебя уже решили, не имея спецификации и ТЗ будешь постоянно что-то менять в концепции CMS, переделывать сотни раз одни и те же вещи, на отлов глюков, оптимизацию уйдет куча времени, а в итоге что ты получишь? :) )) Быть может и напишешь, но что это будет за CMS? Аналогичные продукты, будут намного функциональнее и лучше, и не потому, что программисты которые их писали лучше, вовсе нет, потому, что такие продукты делают командами, (Одна голова хорошо, а две лучше; В споре рождается истина. и т.п.). Так что в итоге ты получишь лишь моральное удовлетворение, что это ты сделал. Но его к сожалению его не сконвертируешь в материальную выгоду.
    Ну это так лирическое отступление. Дело конечно твое писать или нет.

  6. 15
    Алексей Макаров ответил:

    #15 пользуюсь только mySQL.
    Просто пишу свою CMS и задумался, стоит ли использовать в ней универмальные запросы, чтобы ее можно было подключать к разным БД, и решил что не стоит.

  7. 14
    Сергей Екимов ответил:

    часто вы меняете СУБД?))
    2 года использую MySQL – еще не было задач, которые не удалсоь решить на ней.

  8. 13
    Олег Замазеев ответил:

    Ну зачем же делать двойную работу, зачем писать для каждой БД свои запросы, если проще написать парсер, который будет исходный запрос приводить к нужному виду. А насчет библиотек абстрагирования, то тут зависит от контекста, в котором их использовать. В любом случае нужно всегда четко понимать и представлять поставленную задачу и исходя из этого уже принимать решение об использовании тех или иных технологий.

  9. 12
    Леонид Максимов ответил:

    догадайтесь с трех раз. неужели вы думаете, что какая-то библиотека абстрагирования от бд сможет составить хоть сколько-нибудь близкий к оптимальному достаточно сложный запрос?

  10. 11
    Олег Замазеев ответил:

    А можно еще проше, взять количество записей, полученных в результате запроса и поделить на количество записей на одной странице, ну и соответственно выводить по порядку на каждую страницу.

  11. 10
    Алексей Макаров ответил:

    А вот в некоторых CMS есть возможность выбрать БД.
    Так там значит для каждой БД свой набор запросов?

    И есть еще библиотеки для абстрагирования от БД,
    Если их использовать то все равно надо для каждой БД свои запросы писать?

  12. 9
    Даниил Малых ответил:

    #9, id было для примера.:)
    А то, что неизвестно, тут уж ничего нельзя сделать. LIMIT для того и нужен, что бы не зная знать.О_о

  13. 8
    Юрий Лисичкин ответил:

    >> Если знать точное кол-во записей,
    >> точно знать, что они идут по порядку
    Как правило в айти системах ничего такого неизвестно =)

    >> id>[пред. id] AND id<[пред. id + кол-во нужных записей]
    Id это всего-лишь уникальная метка записи в таблице, Id не дает информации о какой-бы то ни было последовательности элементов в таблице. (А если и дает, то это чистая случайность ;) )

  14. 7
    Даниил Малых ответил:

    Если знать точное кол-во записей, точно знать, что они идут по порядку, можно вполне что-то типа SELECT * FROM table WHERE id>[пред. id] AND id<[пред. id + кол-во нужных записей]

  15. 6
    Юрий Лисичкин ответил:

    >> слава mysql
    =))))

  16. 5
    Сергей Екимов ответил:

    LIMIT есть везде, только по-разному называется
    в PostgreSQLвроде OFFSET вместо LIMIT

  17. 4
    Almaz Ilyasov ответил:

    слава mysql

  18. 3
    Артем Карпенко ответил:

    аналогично, в Oracle к результатам запроса добавляется виртуальная псевдоколонка ROWNUM, содержащая номер строки

  19. 2
    Евгений Соболев ответил:

    в MS SQL нужно написать:

    SELECT top 20 * FROM [some_table]
    WHERE [primary_key_field] NOT IN
    (
    SELECT top 10 [primary_key_field]
    FROM [some_table]
    ORDER BY [primary_key_field]
    )

    ORDER BY [primary_key_field]

  20. 1
    Евгений Соболев ответил:

    начиная с MS SQL 2005 есть функция row_number()

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.