![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перестановка строк в БД [D6, dBase, FoxPro]
sst © (2002-06-14 13:32:00)Необходимо переставить в базе данных N полей (начиная со строки X до строки Y) на M позиций вниз (вверх).
Чего-то я никак не могу сообразить, как рабоать не с полями, а с целыми строками... Помогите примерчиком плз.
MishGan` (2002-06-14 16:09:00) [1]Полностью согласен с dimis.
Такого понятия как "физический порядок строк, хранящихся в таблице" в реляционной СУБД не существует.
dimis (2002-06-14 15:17:00) [2]ЛЮДИ ОПОМНИТЕСЬ!!
Вы же работаете с реляционной базой данных!!!
физически переставлять это по меньшей мере глупо, а по большей абсольтно не верно.
в FoxPro это может быть и прокатит,но кто даст гарантию?( разве только разработчики Субд). конечно некоторые могут возразить: "это проверено, все работает правильно и т.п.". Спорить не буду, но приведу аргумент против способа sst.
Твой вариант нормальный если в таблице 10,20.. пусть даже 100 записей. А если 1000, 10000, что тогда?времы выполнения возрастет значительно и не будет уже никого устраивать.
SQL разрабатывали достаточно умные люди и подумали о тростых програмистах ( таких как мы с вами)
существует такой оператор "order by" предназначенный специально для таких случаев
мой вариант такой: ввести еще одно поле в таблице "order_no" и при запросе селать так
select * from table1
where ....
order by order_no
этот запрос выдаст строки в нудном порядке.
если надо поменять порядок записей : просто меняется это поле и все... никаких перестановок или заморочек.
P.S. извиняюсь за резкость
VictorT (2002-06-14 13:59:00) [3]
> sst (14.06.02 13:54)
Правильно представляешь. В этом тебе помогут курсоры.
sst (2002-06-14 13:54:00) [4]Нужно физически переставить несколько строк вниз. В таблице итак используется сложный индекс (по нескольким полям). Нужно именно физически переставить. Т.е. я пердствляю это так: из исходной таблицы во временную копируем строки с начала и до М, потом нужное кол-во строк запоминаем, и копируем во вторую таблицу строки до позиции вставки. Потом копируем сохраненные и все что осталось, временную таблицу переименовываем в исходную.
NDeu (2002-06-14 13:46:00) [5]В БД нет понятие "M позиций вниз (вверх)".
Уточни что ты имееш ввиду и (сам) получиш ответ