Быстрая вставка строки между другими строками
От: Аноним  
Дата: 25.10.06 22:52
Оценка:
Есть таблица:

Pos Data
0 ----
1 ----
2 ----
3 ----
4 ----
5 ----
6 ----
7 ----
8 ----
. .
. .
. .

Pos это PRIMARY AUTOINCREMENT
Данные выводятся в порядке Pos (ORDER BY Pos)

Вопрос:
Как проще всего вставить новую строку между, скажем, 3 и 4-й?

P.S:
Проблема в том, что при вставке приходится менять значения Pos у всех последующих строк на Pos+1
Возможно есть более удобные способы?
Re: Быстрая вставка строки между другими строками
От: ilya_ny  
Дата: 26.10.06 01:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть таблица:


А>Pos Data

А>0 ----
А>1 ----

А>Pos это PRIMARY AUTOINCREMENT

А>Данные выводятся в порядке Pos (ORDER BY Pos)

А>Вопрос:

А>Как проще всего вставить новую строку между, скажем, 3 и 4-й?

А>P.S:

А>Проблема в том, что при вставке приходится менять значения Pos у всех последующих строк на Pos+1
А>Возможно есть более удобные способы?

можно изменить структуру таблицы

T_DATA
Pos   Data  SortOrder
0     ----   1
1     ----   2
3     ----   3
4     ----   4



сортировать (или порядок) — по полю SortOrder

тогда твою проблему можно рещить так (вставить между 2 и 3):

update T_DATA
set SortOrder = SortOrder + 1
where SortOrder > 2

insert T_DATA (Data, SortOrder) 
values ('str', 3)




тут самое главное — выводить данные в порядке SortOrder , а не autoincrement поле Pos.
Re[2]: Быстрая вставка строки между другими строками
От: Аноним  
Дата: 26.10.06 01:57
Оценка:
Здравствуйте, ilya_ny, Вы писали:


_>тогда твою проблему можно рещить так (вставить между 2 и 3):


_>
_>update T_DATA
_>set SortOrder = SortOrder + 1
_>where SortOrder > 2

_>insert T_DATA (Data, SortOrder) 
_>values ('str', 3)
_>



Так можно и не вводить SortOrder а использовать тот же Pos
update T_DATA
set Pos = Pos + 1
where Pos > 2


_>тут самое главное — выводить данные в порядке SortOrder , а не autoincrement поле Pos.
Re[3]: Быстрая вставка строки между другими строками
От: ilya_ny  
Дата: 26.10.06 05:32
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Так можно и не вводить SortOrder а использовать тот же Pos

А>
А>update T_DATA
А>set Pos = Pos + 1
А>where Pos > 2
А>


Pos — AUTOINCREMENT поле, поэтому это работать не будет
Re[2]: Быстрая вставка строки между другими строками
От: hun  
Дата: 26.10.06 07:00
Оценка:
А если SortOrder сделать не int, а скажем decimal, то изменять вообще ничего не надо будет. Просто устанавливать это число в любое значение между нужными. Например, если надо вставить занчение между 2 и 3, то SortOrder = 2.5. А первичный ключ оставить в покое.
Re: Быстрая вставка строки между другими строками
От: Ромашка Украина  
Дата: 26.10.06 11:33
Оценка:
Аноним пишет:
> Возможно есть более удобные способы?

AUTOINCREMENT (1, 1000)
Posted via RSDN NNTP Server 2.0


Всё, что нас не убивает, ещё горько об этом пожалеет.
Re[2]: Быстрая вставка строки между другими строками
От: Аноним  
Дата: 26.10.06 12:51
Оценка:
Здравствуйте, Ромашка, Вы писали:

Р>Аноним пишет:

>> Возможно есть более удобные способы?

Р>AUTOINCREMENT (1, 1000)


что это даст?
Re[3]: Быстрая вставка строки между другими строками
От: Ромашка Украина  
Дата: 26.10.06 16:15
Оценка:
Аноним пишет:
> Р>AUTOINCREMENT (1, 1000)
>
> что это даст?

Это даст приращение по тысяче. То есть места для вставки аш бегом хватит
без апдейта половины таблицы.
Posted via RSDN NNTP Server 2.0


Всё, что нас не убивает, ещё горько об этом пожалеет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.