imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 22.04.2005, 01:46     # 1
Merlyel
Junior Member
 
Регистрация: 10.08.2003
Сообщения: 189

Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)Merlyel Реально крут(а)
Нумерация результата SQL-запроса

При создании SQL-запроса необходимо, чтобы добавлялась еще один столбец, в котором все записи будут пронумерованы по порядку (ну то бишь 1.2,3 etc). При этом нумерация должна происходить после упорядочивания результата (в смысле после ASC/DESC).
ЗЫ. Вообще работаю с Access'овской базой, но хотелось бы иметь универсальное решение ;)
Merlyel вне форума  
Старый 22.04.2005, 01:49     # 2
RaZEr
МОД-Оператор ЭВМ
 
Аватар для RaZEr
 
Регистрация: 18.04.2002
Адрес: Питер
Сообщения: 4 343

RaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех ГуруRaZEr Отец (мать) всех Гуру
А не проще делая "FetchRow" просто увеличивать счётчик (в самой программе)?
RaZEr вне форума  
Старый 22.04.2005, 06:45     # 3
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Jinx
Универсальное решение - то, которое сказал RaZEr. Каждый сервер измывается над SQL как душа ляжет. Например, в Oracle требуемую тбой операцию можно было бы сделать так:
Код:
SELECT F1, ROWNUM R FROM (SELECT FIELD1 F1 FROM TABLE1 ORDER BY 1);
Здесь ключевое слово "ROWNUM" как раз и обозначает номер записи в выборке, но такой финт ушами не проходит в mySQL (поковырявшись в мануале, не нашел даже ничего похожего). Из чего делаю вывод: стандарта (корректного для любой DBSM) SQL-запроса для выборки из DB записей и их нумерации не существуют.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 22.04.2005 в 06:59. Причина: склероZzz...
Ghost вне форума  
Старый 29.04.2005, 10:59     # 4
Dolphin_spb
Guest
 
Сообщения: n/a

create table #table ([inId] [int] IDENTITY (1, 1) NOT NULL ,
[col1] varchar(50),
... )
/* Далее в эту таблицу вставляешь результат select */
insert into #table(/* Перечисляешь все поля кроме [id])
select ...
 
Старый 29.04.2005, 11:54     # 5
S_Gur
Junior Member
 
Регистрация: 13.09.2002
Адрес: Moscow
Сообщения: 110

S_Gur Путь к славе только начался
В принципе, выход, хотя двойная работа будет. На больших объемах данных напряг будет наблюдаться нехилый
S_Gur вне форума  
Старый 29.04.2005, 12:02     # 6
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Dolphin_spb
Или я ошибаюсь, или IDENTITY - автоинкрементируемое поле, а таким может быть только одно в таблице и оно должно быть ключом (непустым, есессно). Ключ заполняется автоматически, начиная от 1 и далее увеличиваясь на 1, при этом остается уникальным в пределах таблицы. Все это просто замечательно, но ключ не является _номером_ очередной записи в результате select-запроса. Т.е. если я вставлю в таблицу поля c, a, b (в таком порядке), то в таблице будут храниться записи: 1, c; 2, a; 3, b. И если я выполню запрос на сортированную по второму полю выборку, то получу: 2, a; 3, b; 1, c.
Или я чего-то не понимаю?...
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 29.04.2005 в 12:12. Причина: чертов Сайгон...
Ghost вне форума  
Старый 29.04.2005, 12:08     # 7
S_Gur
Junior Member
 
Регистрация: 13.09.2002
Адрес: Moscow
Сообщения: 110

S_Gur Путь к славе только начался
Все правильно. Только тебе сначала надо выполнить селект тех данных, которые надо пронумеровать, сделать инсерт в темповую таблицу, а потом сделать селект из этой таблицы на клиента. Двойная работа. В принципе, еще от клиента зависит. На Дельфях это делается элементарно calc-полем

Заполняться таблица должна в том же порядке, что и выдаваться потом. Человеку нужна нумерация строк его выборки, после всех сортировок и фильтраций
S_Gur вне форума  
Старый 29.04.2005, 12:24     # 8
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
S_Gur
Спасибо. Теперь дошло: всю выборку (ту, которую нужно пронумеровать) вставляем во временную таблицу (создав ее непосредственно перед этим) с дополнительным автоинкрементируемым полем, которое и станет при полной выборке из этой tmp-таблицы (select * from tmp_table) номером очередной строки. Оригинально. Работать будет. Только, действительно, несколько громоздко и, при больших объемах данных, тормозно.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!

Последний раз редактировалось Ghost; 29.04.2005 в 12:27. Причина: чертов Сайгон...
Ghost вне форума  
Старый 29.04.2005, 12:33     # 9
S_Gur
Junior Member
 
Регистрация: 13.09.2002
Адрес: Moscow
Сообщения: 110

S_Gur Путь к славе только начался
Универсальное решение - только на уровне клиента. Например, в Дельфях в классе TDataSet есть свойство RecNo. Делаешь вычисляемое поле - и все работает. С серверами сложнее, у каждой СУБД свое решение этой проблемы
S_Gur вне форума  
Старый 01.05.2005, 20:59     # 10
PSyton
Junior Member
 
Аватар для PSyton
 
Регистрация: 19.04.2002
Адрес: Дом
Пол: Male
Сообщения: 187

PSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форумеPSyton Популярный человек на этом форуме
Ну вы тут и развели дебатов...
Как уже было сказано, самое лучшее - на уровне клиента. Это и бысрее и не привязано к конкретной реализации SQL. Временные таблицы это извращение. Мало того что у клиента будет тормозить, при достаточно большом объеме данных, так еще и сервер будет грузить попусту, если таких клиентов будет большое количество одновременно и + не универсально.
__________________
Дураки не динозавры - они не вымрут...
PSyton вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 21:27.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.