Разные условия вывода в зависимости от номера записи в выборке

scorpion-ds

Новичок
Необходимо реализовать, разные условия вывода (SELECT f1, f2, *) в зависимости от номера записи в выборке.

К примеру, есть запрос:
Код:
SELECT f1, f2, f3, f4, f5 WHERE ***;
Необходимо, что бы в первых 200 результатах выводились данные по всем столбцам, а с 201 только по полям f1, f2 и f3.

Можно ли такое реализовать одним запросом?
 

DIG

Новичок
Партнер клуба
А чем объясняется тяга к одному запросу?
 

fixxxer

К.О.
Партнер клуба
Я надеюсь, ты понимаешь, что запрос возвращает фиксированное число столбцов?

Если тебе надо начиная с 201 возвращать, скажем, null - ну, пожалуйста. Конкретный ответ зависит от базы данных, получить номер - в Постгресе window-функцию по row_number(), в ораклах с mssql-ями есть что-то вроде ROWNUM, в Mysql-е можно сделать @переменную прямо в селекте с инкрементом, ну и дальше CASE или, если база умеет, IF.
 

Вурдалак

Продвинутый новичок
Вообще существуют трапециевидные ответы от базы данных помимо классических прямоугольных, но это только в очень серьёзных энтерпрайзных решениях от Oracle, Postgres. Весомая причина перейти на Postgres.
 

scorpion-ds

Новичок
Если тебе надо начиная с 201 возвращать, скажем, null - ну, пожалуйста. Конкретный ответ зависит от базы данных, получить номер - в Постгресе window-функцию по row_number(), в ораклах с mssql-ями есть что-то вроде ROWNUM, в Mysql-е можно сделать @переменную прямо в селекте с инкрементом, ну и дальше CASE или, если база умеет, IF.
Этот вариант понятен, в принципе можно его использовать.

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

На самом деле условие немного сложней, к примеру имеются записи за несколько месяцев, мне необходимо часть столбцов выводить только до 200 записи в каждом месяце. Практически это надо для тарифного ограничения, к примеру в бесплатном тарифе видим только 200 записей в месяц, в платном все и мне бы хотелось при возможности сделать это запросом, а не подвергать ответ дополнительной обработке.
 

fixxxer

К.О.
Партнер клуба
@Вурдалак, ирония понятна, но таки в постгресе я такого не припоминаю. Там, кажись, даже в протоколе такого не предусмотрено (я как-то писал постгрес-клиент).
 

флоппик

promotor fidei
Команда форума
Партнер клуба

fixxxer

К.О.
Партнер клуба
Не, а что это тебе дает-то в итоге? Вот будет у тебя цикл где-то с выводом таблички, и какая тебе разница, null там или undefined?
 

scorpion-ds

Новичок
@antson, symfony, к этой задаче еще не приступил, пока обдумывают как бы проще и гибче это реализовать.
 

antson

Новичок
Партнер клуба
посмотри как реализованы бандлы пагинации . Они правда встраиваются до вызова запроса. Но можно допустимые значения (записей на странице) выбрать так, чтобы 200 кратно делилось , и как только за границу
дописывать не только офсет лимит, но и попробывать фиксить селектовую часть
 

scorpion-ds

Новичок
Я объединяю несколько таблиц, использую функции вроде SUM и пользовательские переменные, последние не поддерживаются doctrine, так что пишу обычные запросы, которые на выводе являются массивом, так что как применить декоратор не сильно представляю. Вторым вариантом обдумываю использование кеш полей, вместо вычисляемых на лету, тогда связанных таблиц не будет и можно будет подумать о декораторах.
 
Сверху