Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

помогите создать SQL запрос


Страницы:   1 2 3 4

toropoff ©   (2011-10-10 18:16:00) 

есть таблица с полем ID.
нумерую сам при добавлении.
необходимо произвести перенумерацию упорядочив по определенному полю, например naimen.
база Access.
в таблице около полусотни тысяч записей.
путем перебора очень долго получается.
хотелось бы одним запросом перенумеровать поле ID значением номера строки.
что-то типа
UPDATE myTable SET id =  номер записи
но как-то ещё учесть упорядочивание по полю naimen

простите что прошу готовое решение, никак не получается


знайка   (2011-10-11 01:33:00) [41]

ну так пусть excel и нумерует, у него это получится куда быстрее


armstrong   (2011-10-11 01:29:00) [42]

знайка,
да не.. все на delphi.
вывод в файл формата excel'я


armstrong   (2011-10-11 01:27:00) [43]

sniknik ©, да в том то и дело, что изменение поля при простом переборе занимает до получаса. в таблице около 50т. записей.

tempQuery.first;
while not eof do begin

 пробывал через edit post, через update - один фиг до получаса..

 next;
end;

Германн ©, RecNo наверное "бзик", я просто хотел показать что нужен номер записи..


знайка   (2011-10-11 01:23:00) [44]

а печатает тоже Access, или как?


sniknik   (2011-10-11 01:20:00) [45]

> а у Вас мысли есть как можно это сделать?
если бы не ваши ограничения... типа. только запросом, то мысль - перебор по рекордсету. 30 сек раз в месяц не такая уж тяжкая ноша...


Германн   (2011-10-11 01:20:00) [46]


> была бы нормальная СУБД через хранимые процедуры накрайняк
> что-то слепил, может быстрее чуток было бы..

А чем Аксесс "ненормальная" БД?
Если речь только о том, чтобы раз в месяц формировать отчёт?

Все ваши посты упоминают RecNo. Это ваш бзик такой?
У "нормальной" БД нет никакого RecNo!"
Сравните, например, с файловой системой. Какой файл первый, какой последний?


armstrong   (2011-10-11 01:05:00) [47]

Ega23 ©, Access, если это можно назвать СУБД.

sniknik ©, а у Вас мысли есть как можно это сделать?

была бы нормальная СУБД через хранимые процедуры накрайняк что-то слепил, может быстрее чуток было бы..
но тут тупым перебором другой раз пол часа уходит.
не думал с утра что так всё сложно окажется :(


sniknik   (2011-10-11 00:58:00) [48]

> интересный запрос, пока ничего не понятно..
это спец запрос для внесения "солидности" в программу... там где "путем перебора" ([0])  меньше минуты, тут будет меньше часа... и чем дальше тем больше, в прогрессии.
+ "закладка" на существующие, и возрастающие, значения ID. для произвольной сортировки бесполезен.


Ega23   (2011-10-11 00:53:00) [49]

Бред какой-то.
Впрочем, твои проблемы. СУБД какая?


armstrong   (2011-10-11 00:49:00) [50]


> select *,
> (select count(z.id) from mytable z where z.id <= mytable.
> id) as rownumber
> from mytable


насколько я понимаю мысль, в вашем примере пронумеровать используя упорядочивание по наименованию не получится.
даже без упорядочивания не получится, если id будут одинаковы.


armstrong   (2011-10-11 00:32:00) [51]

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

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

не спрашивайте зачем такая хрень нужна.

знайка, спасибо! интересный запрос, пока ничего не понятно..
а как это будет выглядеть с update ?


Inovet   (2011-10-11 00:09:00) [52]

> [20] знайка   (11.10.11 00:02)
> select *,
> (select count(z.id) from mytable z where z.id <= mytable.id) as rownumber
> from mytable

Только naimen надо.


Ega23   (2011-10-11 00:08:00) [53]


> Только зачем нужна нумерация в базе, ещё и постоянно требуется
> её обновлять - вот это странное желание.


Сильно подозреваю, что это опять сага о XYZ


Inovet   (2011-10-11 00:07:00) [54]

> [18] Ega23 ©   (11.10.11 00:00)
> Я всегда в order by могу этот порядок поменять.

Автор так и хочет сделать

> [0] toropoff   (10.10.11 18:16)
> необходимо произвести перенумерацию упорядочив по определенному полю, например naimen.

Только зачем нужна нумерация в базе, ещё и постоянно требуется её обновлять - вот это странное желание.


знайка   (2011-10-11 00:02:00) [55]

что-то типа такого
select *,
(select count(z.id) from mytable z where z.id <= mytable.id) as rownumber
from mytable


Ega23   (2011-10-11 00:01:00) [56]


> ну на фокспро в запросе RecNo и есть номер записи..

Он меняется, понимаешь? Меняется. Сейчас он один, через 5 минут - другой. А запись - та же самая.


Ega23   (2011-10-11 00:00:00) [57]


> при select * from mytable порядок записей будет как физически
> они сохранены. или не так?


Не так. Гарантированный порядок сортировки будет только в случае Order by, всё остальное не гарантируется.


> мне нужно одним махом через UPDATE  занести в поле RecNo
> (Integer) порядковый номер записи.


Что такое "порядковый номер записи"?

Я всегда в order by могу этот порядок поменять. А также потом на клиенте этот порядок поменять. А потом ещё и отфильтровать, как на клиенте, так и на сервере.

Ответь на один простой вопрос: какую проблему ты решаешь?


Inovet   (2011-10-10 23:53:00) [58]

Когда наблюдаются странные желания, закрадывается сомнение - а надо ли это на самом деле или надо сделать совсем не так.

Гуглить около темы порядковый номер в SQL запросе.


stas   (2011-10-10 23:35:00) [59]

armstrong   (10.10.11 23:08) [14]
Это я понял.
А цель перенумерации какая, тем более делать это постоянно ?


armstrong   (2011-10-10 23:08:00) [60]

на фоксе было бы replace ID with recno()


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо