$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