Как обновить все поля id одним запросом?

137
27 мая 2021, 15:10

Допустим есть таблица articles с полями id,title,text.
id это поле с автоинкрементом, но в этом поле значения идут не по порядку, а в разброс, к примеру 0,1,5,6,20,22.
Как одним запросом упорядочить это поле id, т.е. чтобы значения поля id были упорядочены, (0,1,2,3,4,5...)?

P.S. в данном случае не интересуют связи с этим полем id в других таблицах.
P.S. это нужно в учебных целях.
Кстати случайно затёр поле title в этой же таблице.
т.е. в этом поле было название записи, теперь там стоит одинаковое число во всех записях таблица articles:
(запись 1: [id=0;title=2;])
(запись 2: [id=1;title=2;])
(запись 3: [id=5;title=2;])
Как одним запросом поменять поле title, в данном случае не важно какое там будет значение, главное чтобы разное, к примеру title1,title2,title3.
Меня интересует как можно одним запросом поменять поле id, чтобы упорядочить его значения, и вторым запросом чтобы восстановить поле title, это в учебных целях нужно

Answer 1

Проблема в том, что в БД нет понятия "идут подряд", в общем случае. попробуйте вот так

SET @i:=0;
UPDATE articles SET id = @i:=(@i+1) WHERE 1=1;
update articles set title=concat('title', CAST(id as VARCHAR(50)));
Answer 2

Нет такой возможности, только в два этапы.

ALTER TABLE `articles` DROP `id`;
ALTER TABLE `articles` ADD `id` INT(11) NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (`id`);
READ ALSO
Как сделать insert … on duplicate key update в Lighthouse-php на Laravel?

Как сделать insert … on duplicate key update в Lighthouse-php на Laravel?

Как сделать mutation чтобы был запрос в БД insert or update?

149
Обновление через pjax

Обновление через pjax

Вообщем есть такая проблема, я вывожу данную на страницу в 3 разных массивахВот так:

135
Как сделать вложенный цикл foreach в for?

Как сделать вложенный цикл foreach в for?

Создаю в папке с помощью цикла for документы с разным наполнениемЭто наполнение подтягивают из json

122