Ограничение выборки

Роберт

Аналитик
Ограничение выборки

Народ , подскажите , а в PostgreSQL есть какоето подобие LIMIT из MySQL , чтобы можно былобы ограничить выборку и выводить её порчиями , например с 1 по 10 , потом 11..20 , 21..30 и т.д. Я только пару дней как работая с этой базой , и ни как не могу найти аналога.
Помогите пожалуйста.
 

Hiller

Guest
Re: Ограничение выборки

SELECT ....... FROM ..... OFFSET <с какой записи> LIMIT <максимальное количество записей>
 

Роберт

Аналитик
Re: Re: Ограничение выборки

Автор оригинала: Hiller
SELECT ....... FROM ..... OFFSET &lt;с какой записи&gt; LIMIT &lt;максимальное количество записей&gt;
Да я видел это но тут будут проблемы с сортировкой.
В описании написано:
--
As of PostgreSQL 7.0, the query optimizer takes LIMIT into account when generating a query plan, so you are very likely to get different plans (yielding different row orders) depending on what you use for LIMIT and OFFSET. Thus, using different LIMIT/OFFSET values to select different subsets of a query result will give inconsistent results unless you enforce a predictable result ordering with ORDER BY. This is not a bug; it is an inherent consequence of the fact that SQL does not promise to deliver the results of a query in any particular order unless ORDER BY is used to constrain the order.
--
Что как я понимаю означает что если у меня есть сорок записей и я хочу вывести по 20 штук отсортировав по приоритету (допустим там есть поле с приоритет) , то он вначале возьмёт первые 20 и их отсортирует , а потом возьмёт вторые 20 и отсортирует их. Тоесть и в одном и другом блоке у меня будет и самый большой и самый малый приоритет.
Короче релевантности небудет.
Вобще странно что они не поддерживают стандарты SQL92 , даже такие псевдобазы как MySQL это поддерживают , а тут вроде солидная система , а на самом деле выходит - фуфло!
Чтобы нормально сделать , надо самому извращаться...
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Re: Re: Re: Ограничение выборки

Автор оригинала: Роберт

Да я видел это но тут будут проблемы с сортировкой.
В описании написано:
--
As of PostgreSQL 7.0, the query optimizer takes LIMIT into account when generating a query plan, so you are very likely to get different plans (yielding different row orders) depending on what you use for LIMIT and OFFSET. Thus, using different LIMIT/OFFSET values to select different subsets of a query result will give inconsistent results unless you enforce a predictable result ordering with ORDER BY. This is not a bug; it is an inherent consequence of the fact that SQL does not promise to deliver the results of a query in any particular order unless ORDER BY is used to constrain the order.
--
Перевод (примерный):
Начиная с версии 7.0 оптимизатор запросов принимает во внимание LIMIT при создании плана запроса, так что вы скорее всего получите разные планы в зависимости от того, что вы используете в кач-ве LIMIT и OFFSET. Таким образом, использование разных значений LIMIT/OFFSET для выбора разных частей результата запроса даст непоследовательные результаты, если вы не зададите предсказуемый порядок выдачи записей при помощи ORDER BY. Это не баг, а прямое последствие того, что SQL не обещает вернуть результат запроса в каком-либо определённом порядке, если для задания такового порядка не используется ORDER BY
Автор оригинала: Роберт
Что как я понимаю означает что если у меня есть сорок записей и я хочу вывести по 20 штук отсортировав по приоритету (допустим там есть поле с приоритет) , то он вначале возьмёт первые 20 и их отсортирует , а потом возьмёт вторые 20 и отсортирует их. Тоесть и в одном и другом блоке у меня будет и самый большой и самый малый приоритет.
Короче релевантности небудет.
Понимаешь ты неправильно, сначала сортируется весь результат, потом от него берётся часть. Более того, проверить, что это именно так, было бы гораздо быстрее, чем писать длиннющий опус в форум.

Автор оригинала: Роберт
Вобще странно что они не поддерживают стандарты SQL92 ,
LIMIT не входит в стандарт SQL92. ;)

Автор оригинала: Роберт
даже такие псевдобазы как MySQL это поддерживают , а тут вроде солидная система , а на самом деле выходит - фуфло!
Чтобы нормально сделать , надо самому извращаться...
Самая большая проблема Postgres'а не в этом, в том, что люди, органически неспособные прочитать доки/провести элементарные тесты обламываются в чём-то и начинают ругать его в форумах...
 

Amigo

Guest
Не нужно так радикально гнать Роберт (Аналитик?).
У всего есть недостатки, а в данной базе их не так и много.
ORDER BY применяй в запросе.
А выводить порциями не такая уж и проблема.
 
Сверху