Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> смещаемый id (БД MySQL), как сделать так чтоб при удалении строки 
:(
    Опции темы
IZ@TOP
  Дата 18.3.2003, 00:26 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



----- BD MySQL -----

Вопрос:
как сделать так чтоб при удалении строки из таблицы, номер йд следующей за ней строкой принимал значение удаленной и те за ней так же меняли confused.gif?

например:
Код


table test
------------------------------------------------
| id  ||                    text                       |
------------------------------------------------
|  1  ||                   text1                      |
------------------------------------------------
|  2  ||                   text2                      |
------------------------------------------------
|  3  ||                   text3                      |
===========================
Допустим я удолю строку id= 1 тогда мне надо чтоб Id = 2 принял значение 1, а id = 3 значение 2:

------------------------------------------------
| id  ||                    text                       |
------------------------------------------------
|  1  ||                   text2                      |
------------------------------------------------
|  2  ||                   text3                      |
===========================


При обьяве (id int not null auto_increment,text text,primary key(id))
он еще и при удалении допустим значений 20 ,добавленную строку помечает id = 21
а мне нужно чтоб смещалось ! Плз ПОМОГИТЕ, ЧТО ДЕЛАТЬ confused.gif?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Medved
Дата 18.3.2003, 05:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: нет
Всего: 154



А зачем? На то аутокримент и существует, чтобы не повторялись ключевые значения.


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
IZ@TOP
Дата 18.3.2003, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Цитата
А зачем? На то аутокримент и существует, чтобы не повторялись ключевые значения.


А мне нужно чтобы при удалении он смещался !


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
SmaLL
Дата 18.3.2003, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 557
Регистрация: 17.12.2002
Где: Voronezh

Репутация: нет
Всего: 2



Цитата(Iz @ 18.3.2003, 09:34)
Цитата
А зачем? На то аутокримент и существует, чтобы не повторялись ключевые значения.


А мне нужно чтобы при удалении он смещался !

Автоинкрементное поле не сдвинется! Хоть тресни!


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
AntonSaburov
Дата 18.3.2003, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Если надо иметь такой ID - то стОит задуматься о перепроектировании.

А если надо просто ну никак - бшлокируешь таблицу и сразу после удаления
(обозначим удаленный id как id_deleted)

update TABLE set id=id-1 where id>id_deleted

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

PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 18.3.2003, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Ладно, спасибо за информацию.

И у меня тут созрел еще один вопрос:
А как сделать чтоб ID генерился из четырех-пяти значных чисел ?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
AntonSaburov
Дата 18.3.2003, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
А как сделать чтоб ID генерился из четырех-пяти значных чисел ?


А что, целое 32 бита таких величин не поддерживает ?
PM MAIL WWW ICQ   Вверх
IZ@TOP
Дата 18.3.2003, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



AntonSaburov может ты меня не так понял, мне надо что бы id не с 1 генерилось а уникальные вроде там 4679 следующее число 7583 ну и тд.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
AntonSaburov
Дата 18.3.2003, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
AntonSaburov может ты меня не так понял,


Не без этого biggrin.gif

А как ты генеришь сейчас ?
PM MAIL WWW ICQ   Вверх
Oleg
Дата 18.3.2003, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 16.9.2002

Репутация: нет
Всего: нет



Я вроде понял, у меня тоже такое было, правда не на MySQL, но я бы сделал id не аутоинкремент, а просто длинным целым , и процедуру, котороая в цикле пробегала бы всю таблицу (или нижний кусок после удаленной записи )и меняла бы id

условно говоря:
...
for i:= 1 to table.recordcount do begin
table.recno:= i;
id:= i
end;
...
что-то вроде этого.
--------------------
...Знающий не доказывает.   Доказывающий не знает...
PM MAIL   Вверх
U-gene
Дата 20.3.2003, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.8.2002

Репутация: нет
Всего: нет



Хоть тресни, не могу ВООБЩЕ понять, зачем такое поле надо. Ссылаться на него нельзя (в следущий раз можно попасть на другую запись), что бы число записей в таблице посмотеть - так это через COUNT можно сделать. Никакой полезной информации оно ИМХО нести не может, поскольку меняется. Например, пользователь сегодня видит одну 20-ю запись, а завтра 20-ой окажеться другая запись. Ежели не секрет, поделитесь, зачем оно?
PM MAIL   Вверх
IZ@TOP
Дата 20.3.2003, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: нет
Всего: 73



Да была одна мысль ... но я думаю действительно геморойничать не к чему ...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
AntonSaburov
Дата 20.3.2003, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Цитата
Да была одна мысль ... но я думаю действительно геморойничать не к чему ...


Вот это правильно biggrin.gif
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0531 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.