Специальная колонка-счетчик в select запросе

pachanga

Новичок
Специальная колонка-счетчик в select запросе

Нам необходимо в любом select запросе иметь простую колонку счетчик, показывающую порядковый номер выбранной записи, причем это порядковый номер должен быть абсолютным, без учета условия в WHERE.

Объясню на примере:
Пусть у нас есть результат некоторого запроса без WHERE, скажем:
PHP:
counter            id     
----------------  ------ 
1                    4      
2                    15      
3                    7      
4                    10      
5                    5      
6                    8      
7                    11
Колонка counter содержит как раз абсолютный порядковый номер записи в запросе.

Потом на этот результат как бы наложили ограничение, скажем WHERE id=15 OR id=11:
PHP:
counter            id     
----------------  ------ 
2                    15      
7                    11
Как это сделать в одном запросе(без подзапросов) ума не приложу :(
 

Кром

Новичок
В одном запросе, если я правильно понял, что ты имеешь ввиду, не получиться.
 

pachanga

Новичок
А можно ли просто вставить порядковый номер записи результата запроса?
 

Кром

Новичок
>А можно ли просто вставить порядковый номер записи результата запроса?

Куда вставить? Более точно можешь изложить что тебе надо?
 

pachanga

Новичок
Есть select запрос, он возвращает некоторый результат:

PHP:
counter            id      
----------------  ------ 
1                    4       
2                    15       
3                    7       
4                    10       
5                    5       
6                    8       
7                    11
Динамически формируемое поле counter содержит порядковый номер записи в выборке.
Как сделать такое поле?
 

[ Z ]

Новичок
какая-то изврашённая фича, ну можно делеть селект в темпори тейбл где формировать эток каунтер, а потом из этой временной уже делать запрос с where
 

Кром

Новичок
>Как сделать такое поле?

Какое поле? Где сделать? В базе? На странице? Где???
В конце концов, напиши простыми словами, что тебе КОНКРЕТНО надо. Типа "есть такие строки ... хочу чтобы они при выводе выводились таким образом ... / или в базе обозначались под номерами ...".
 

Макс

Старожил PHPClub
pacha
имхо задача из разряда "ты не должен этого хотеть"

как определяется этот порядковый счетчик? Порядок чего он показывает ? (на всякий случай напомню, записи в таблицах изначально неупорядочены)
 

pachanga

Новичок
Попробую объяснить еще раз:

Есть select запрос, есть выборка по этому запросу, так вот каждый ряд этой выборки мы можем последовательно пронумеровать, начиная с 1.

Этого можно легко добиться обычным php циклом по выборке, так вот мне интересно, а может ли mysql сам проставить порядковые номера, в отдельную колонку.

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

Пусть у нас есть на странице ограничивающий пейджер для некоторой выборки(совершенно произвольный select запрос). Сделать такой с пощью заданного offset, limit и подсчитанного общего количества элементов элементарно.

Пусть нам на страницу приходит id конкретного элемента из выборки. Так вот получается надо определить offset для пейджера(limit не меняется), т.е. "прокрутить" пейджер до этого элемента.

Вариант, как это сделать, самый прямолинейный(мы уже им пользуемся):
1) Сделать полную выборку
2) В php цикле пройтись по всем элементам, пока не найден искомый id, увеличивая счетчик
3) Посчитать все элементы выборки
4) Высчитать offset на основе общего количества элементов, счетчика и limit пейджера

Так вот я думал, что можно как-то пронумеровать по порядку(знаю-знаю, предположение более чем сомнительное) выбираемые ряды(см. самый первый пост).

Не пинайте меня, это вопрос изначально из разряда, "а можно ли такое вообще..."
 

Макс

Старожил PHPClub
Пусть нам на страницу приходит id конкретного элемента из выборки. Так вот получается надо определить offset для пейджера(limit не меняется), т.е. "прокрутить" пейджер до этого элемента.
вот решение, которое я предлагал на другом форуме
http://forums.webscript.ru/showthread.php?s=&threadid=12332&msgnum=16
 

pachanga

Новичок
Посмотрел, насколько я понимаю(я не ошибаюсь?), для твоего метода требуется знать о внутренностях sql запроса.
Нам такое не подходит...
 

pachanga

Новичок
Боюсь, ты не внимательно читал топик...
Что ты имеешь в виду под LIMIT [offset,] rows ?

Ты можешь прокрутить пейджер до указанного id, как-то с помощью этого? Сомневаюсь...
 

Crazy

Developer
pacha, легко. Просто вначале запроси все id из базы. Если по ним посторен индекс, то это будет выполнено быстро. :)
 

chira

Новичок
pacha
твоя терминология с "пейджерами" у меня ассоциируется с простой разбивкой результата селекта на страницы.
напиши простым , а не кодированым языком.
 
Сверху