@pashulke

Как удалять пользователя из БД без удаления id?

Мне нужно удалить пользователя, чтобы не было далее возни с айди. К примеру, есть пользователи с айди 1, 2 и 3. Если я удалю второго юзера (всю строку из mysql), то останутся айди 1 и 3. Как можно сделать так, чтобы айди 3 превратилось в 2?
  • Вопрос задан
  • 2616 просмотров
Пригласить эксперта
Ответы на вопрос 4
FanatPHP
@FanatPHP
Чебуратор тега РНР
ТЕБЕ
ЭТО
НЕ НУЖНО
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
-1. Блокируете вход пользователей на сайт и завершаете сессии всех уже вошедших.
0. Делаете бэкап базы.
1. Проверяете, что все ссылки на id пользователя в других таблицах объявлены как foreign key on update cascade.
2. Запросом получаете все id в порядке их возрастания.
3. Генерируете список замен id порядковыми номерами полученных строк.
4. Выполняете запросы на замену по списку.
5. Выполняете alter table `users` set auto_incremen=... со следующим порядковым номером.
6. Думаете, на кой ляд всё это было нужно, если id всё равно обрабатываются скриптом, и ловите глюки на сайте.
7. Восстанавливаете базу из бэкапа.
8. Разрешаете вход пользователей на сайт.
9. В будущем не удаляете пользователей, а просто ставите атрибут "удалён".
Ответ написан
@netW0rm
Вообще лучше так не делать, но если хочется...
Вот примерный алгоритм от которого можно отталкиваться:
$user_id = 2; // id который удаляем
mysql_query("LOCK TABLES table WRITE");
mysql_query("ALTER TABLE table AUTO_INCREMENT = (SELECT max(id) FROM table)");
mysql_query("DELETE FROM table WHERE id = $user_id");
mysql_query("UPDATE table SET id = id-1 WHERE id > $user_id");
mysql_query("UNLOCK TABLES");
Ответ написан
IgorMann
@IgorMann
Руковожу марке́тингом
Почитай про нормализацию, надеюсь в скором времени ты поймешь, что это самая глупая затея, которая могла прийти тебе в голову
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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