Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   вопрос по mysql (https://forum.antichat.xyz/showthread.php?t=61727)

!{ra!{e/\/ 13.02.2008 18:41

вопрос по mysql
 
Код:


--------------------
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

Цитата:

Сообщение от bul.666
Тогда нарушится автонкремент...

м-м-м... вот в 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

Цитата:

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

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

!{ra!{e/\/ 13.02.2008 19:17

Цитата:

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

это так если только я удаляю самую нижнюю строку а если нет то надо по всем нижестоящим $n+1...просто это получаестя не оптимально...придется переписавать некоторые моменты кода..

!{ra!{e/\/ 13.02.2008 19:19

Цитата:

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

просто я написал сайт упираясь на прим кей N вот доделал удаление данных и понял что после удаления все работает некорректно.....
Значит лучше будет переписать участки кода?да?

astrologer 13.02.2008 19:20

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

desTiny 13.02.2008 19:22

Цитата:

Сообщение от !{ra!{e/\/
Значит лучше будет переписать участки кода?да?

Либо так, либо... Зачем тебе нужен N? Так если ты его выводишь, то можешь получить номер записи(порядковый) так:
Код:

SELECT COUNT(N) FROM `mytable` where N <= (N из твоей записи)

Isis 13.02.2008 19:56

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

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


Время: 04:17