Генерация уникального ID сдвиг при удалении - MySQL
Формулировка задачи:
Вот к примеру делаю такую таблицу:
Получиться табличка с автоматическим заполнением уникального ID. Как сделать, что бы при удалении какой нибудь строки в таблице, генератор автоматически переприсвоил уникальные ID.
Пример:
1 Вася
2 Петя
3 Жора
Удаляем Петю. Получаем:
1 Вася
3 Жора
А мне надо получить:
1 Вася
2 Жора
Заранее спасибо.
CREATE TABLE t401 (id MEDIUMINT NOT NULL AUTO_INCREMENT,surname char(20), name CHAR(20) ,patronymic char(20), primary key (id));
Решение задачи: «Генерация уникального ID сдвиг при удалении»
textual
Листинг программы
$i=$unikey; //позиция в которую вставляется строка $res = $db->query("SELECT * FROM clietsbase " ); //увеличение всех номеров на единицу от вставляемого while($row=$res->fetch_assoc()){ $j=$i+1; $k=$i-1; $result = $db->query ("UPDATE clietsbase SET unikey='$j',flag=1 WHERE unikey=$i and flag=0"); $result = $db->query ("UPDATE clietsbase SET unikey='$k',flag=0 WHERE unikey=$k and flag=1"); $i++; } $result = $db->query ("UPDATE clietsbase SET unikey='$k',flag=0 WHERE unikey=$k and flag=1"); //вставка строки на позицию куда хотели $result = mysqli_query ($db, "INSERT INTO clietsbase (unikey,day,NameClient,Adress,Contakt) VALUES ('$unikey','$day','$NameClient','$Adress','$Contakt')");
Объяснение кода листинга программы
- В первую очередь, мы начинаем с переменной
$i
, которая равна уникальному ключу (unikey
). - Затем мы выполняем запрос SELECT, чтобы получить все строки из таблицы
clietsbase
. - В то время как есть строки в результате запроса SELECT, мы увеличиваем значение
$i
на 1. - Мы также сохраняем предыдущее значение
$i
в переменной$k
, чтобы использовать его позже. - Мы выполняем два запроса UPDATE: один для увеличения значения
unikey
на 1 для следующей строки после$i
и установки флага на 1, а другой для уменьшения значенияunikey
на 1 для предыдущей строки после$i
и установки флага на 0. - Мы увеличиваем значение
$i
на 1 после каждого цикла, пока все строки не будут обработаны. - После того, как все строки были обработаны, мы выполняем последний запрос UPDATE, чтобы установить флаг на 0 для последней строки после
$i
. - Наконец, мы выполняем запрос INSERT, чтобы вставить новую строку с данными клиента на позицию, определенную значением
$i
. Список переменных и их значений: $i
- уникальный ключ (unikey
)$unikey
- значение, которое мы хотим вставить вunikey
$day
- день$NameClient
- имя клиента$Adress
- адрес$Contakt
- контактная информация$j
- следующая позиция$k
- предыдущая позиция$result
- результат выполнения запроса$db
- объект подключения к базе данных
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д