khipster
@khipster

Как сделать чтобы AUTO INCREMENT заполнял удалённые значения (например id: 1,2,3,4. Удалил 3. След. добавляемое 3, а не 5)?

Как сделать чтобы AUTO INCREMENT заполнял удалённые значения (например id: 1,2,3,4. Удалил 3. След. добавляемое 3, а не 5)?
  • Вопрос задан
  • 1821 просмотр
Решения вопроса 1
DevMan
@DevMan
это уже будет не AUTO INCREMENT.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
trevoga_su
@trevoga_su
Господи, но почему столько идиотов?

И ведь не один не сказал, что этого делать не надо. Что вопрос лишен смысла и практической пользы. Что так никто не делает.

Человек же 2 дня назад учиться начал судя по всему, а ему уже сразу заведомо ложные решения дают.

автор, ты знаешь какой максимальный счетчик у типа INT поля таблицы в mysql? Я тебе отвечу: 4294967295 - это четыре миллиарда двести девяносто четыре миллиона девятьсот шестьдесят семь тысяч двести девяносто пять.

теперь ответь на вопрос - ты правда думаешь, что твоя "задача" имеет какую-то пользу или смысл?
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Как вариант - не удалять запись полностью, только чистить поля таблицы, кроме автоинкремента, при вставке делать так:
select @emptyid := `id` from `sometable` where `somefield` IS NULL order by `id` limit 1;
if( @emptyid, 
(update `sometable` set `somefield`="somevalue" where `id`=@emptyid),
(insert into `sometable` (`somefield`) values ("val"))
);
Ответ написан
Комментировать
$q=sql('SELECT count(*) as counter from gr');
$data=mysql_fetch_assoc($q); $counter=($data?intval($data['counter']):0);
for($id=1; $id<=$counter; $id++){ // перенумеровываю все id
$result = sql('SELECT * from gr WHERE id='.$id.' LIMIT 1');
if(mysql_num_rows($result)==0) {// id - свободен
$result = sql('SELECT MAX(id) as id from gr');
if (($row = mysql_fetch_assoc($result)) && ($id<$row['id'])){
sql('UPDATE gr SET id=LAST_INSERT_ID('.$id.') WHERE id='.$row['id'].' LIMIT 1');
// то же сделать во всех связанных базах!
sql('UPDATE price SET gr='.$id.' WHERE gr='.$row['id']);
sql('UPDATE kateg SET gr='.$id.' WHERE gr='.$row['id']);
}
else break;
}
}

В 99 процентах случаях это делать не нужно. Уникальный ключ для того и создан, чтобы при удалении записи оставалась "дырка" в нумерации. Но, иногда приходится. Например, я создавал сайт и набирал справочник для клиента на локальной машине, естественно, было много правок. Хотелось при "выкладывании вживую" чтобы все выглядело красиво. Вот для такого случая и сделан следующий скриптик:

htmlweb.ru/php/mysql_faq.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы