PDA

Просмотр полной версии : вопрос по mysql


!{ra!{e/\/
13.02.2008, 18:41
--------------------
N | street | col |
1 blabla1 bla1
--------------------
2 blabla2 bla2
--------------------
3 blabla3 bla3
--------------------
4 blabla4 bla4

есть такая mysql база где N- auto_inc и primary_key удаляю оттуда 2строку
delete FROM `bd` where `N`=2 "
Получается вот так

--------------------
N | street | col |
1 blabla1 bla1
--------------------
3 blabla3 bla3
--------------------
4 blabla4 bla4

Как мне настроить БД чтоб N автоматически менялся т .е было так...или как легче это сделать?

--------------------
N | street | col |
1 blabla1 bla1
--------------------
2 blabla3 bla3 тут чтоб 3 заменилось на 2
--------------------
3 blabla4 bla4 тут 4 на 3 и так далее

spider-intruder
13.02.2008, 18:52
Не понятно - то те колонку N надо уменьшать то уже символ в поле стрит. пересмотри пост ты все верно написал?

!{ra!{e/\/
13.02.2008, 18:55
все написал правильно там
мне нужно я удаляю строку а солбец N как бы расставляется 1 2 3 4 .....

bul.666
13.02.2008, 19:01
Как мне настроить БД чтоб N автоматически менялся
Никак... Либо Php скриптом, но толку?

desTiny
13.02.2008, 19:01
// $N1 - N удаляемой записи
$sql="UPDATE `mytable` SET N=N-1 WHERE N>$N1"

Так, наверно.

desTiny
13.02.2008, 19:02
Только работать всё поэтому будет ме-е-е-е-едленно...

bul.666
13.02.2008, 19:02
Тогда нарушится автонкремент... =\ Смысла в нем исчезает

desTiny
13.02.2008, 19:06
Тогда нарушится автонкремент...

м-м-м... вот в firebird/interbase триггер можно сделать...
а так, действительно, автоинкремент вручную надо делать:
$newN <= SELECT COUNT(N) From `mytable`
$newN++;
INSERT INTO `mytable` VALUES ($newN, 'somenewtext');

!{ra!{e/\/
13.02.2008, 19:06
я написал сайт....и при удалении какой либ строки предаю гет запросом n и удаляю строку но при этом структура вся меняется....

bul.666
13.02.2008, 19:07
скажи лучше зачем тебе менять N ?

desTiny
13.02.2008, 19:08
"структура вся меняется"
Куда она меняется-то?

Isis
13.02.2008, 19:14
Убери auto_increment и при добавлении чего-то ставь N + 1, при удалении N -1
Проблема то =\

desTiny
13.02.2008, 19:16
Убери auto_increment и при добавлении чего-то ставь N + 1, при удалении N -1
Проблема то =\

Вот и я про то же... Только всё равно не понимаю, нахрена это надо-то? Так каждое удаление будет всю таблицу перекручивать...

!{ra!{e/\/
13.02.2008, 19:17
Убери auto_increment и при добавлении чего-то ставь N + 1, при удалении N -1
Проблема то =\
это так если только я удаляю самую нижнюю строку а если нет то надо по всем нижестоящим $n+1...просто это получаестя не оптимально...придется переписавать некоторые моменты кода..

!{ra!{e/\/
13.02.2008, 19:19
Вот и я про то же... Только всё равно не понимаю, нахрена это надо-то? Так каждое удаление будет всю таблицу перекручивать...
просто я написал сайт упираясь на прим кей N вот доделал удаление данных и понял что после удаления все работает некорректно.....
Значит лучше будет переписать участки кода?да?

astrologer
13.02.2008, 19:20
Разве это не является одним из принципов реляционной БД?
С ним не нужно бороться :)

desTiny
13.02.2008, 19:22
Значит лучше будет переписать участки кода?да?
Либо так, либо... Зачем тебе нужен N? Так если ты его выводишь, то можешь получить номер записи(порядковый) так:
SELECT COUNT(N) FROM `mytable` where N <= (N из твоей записи)

Isis
13.02.2008, 19:56
Мда...у тебя прим.кей id не изменяется при авто_инкремент, а ыт говоришь что после удаления что-то не то упираясь на прим.кей...
Противоречие получается, правда?

Ищи ошибку в коде