Найти одинаковые значения и переименовать - MySQL
Формулировка задачи:
Такой вопрос нужно сделать выборку всех одинаковых имен находящихся в post_name и вывести. Это сделано:
Нужно теперь переименовать все найденные например добавить -1
т.е. было
ezoton
ezoton
ezoton
vitor
vitor
vitor
нужно получить
ezoton-1
ezoton-2
ezoton-3
vitor-1
vitor-2
vitor-3
SELECT `post_name`, COUNT(*) AS `count` FROM `dff_posts` GROUP BY `post_name` HAVING `count` > 1
Решение задачи: «Найти одинаковые значения и переименовать»
textual
Листинг программы
create table t ( id int not null auto_increment, n char(16), -- мое сокращение для поля `post_name` constraint pk_id primary key(id) ) engine = myisam default character set = cp1251; insert into t(n) values ('ezoton'), ('vitor'), ('vitor'), ('ezoton'), ('pizza'), ('vitor'), ('ezoton'), ('vitor'), ('ezoton'), ('vitor'); delete from t where id in (2, 8, 9); -- для реалистичности select * from t; update t join ( select c.id, concat(n, ' - ', cast(num as char(3))) upd from ( select count(*) num, b.id, b.d, b.n from ( select *, right(concat('000', cast(id as char(3))), 3) d from t ) a join ( select *, right(concat('000', cast(id as char(3))), 3) d from t ) b on a.d <= b.d and a.n = b.n group by b.d, b.id, b.n ) c ) d on d.id = t.id set n = upd; select * from t order by n;
Объяснение кода листинга программы
- Создание таблицы
t
с полямиid
,n
и ограничением первичного ключаpk_id
. - Вставка 10 строк данных в таблицу
t
с разными значениями в полеn
. - Удаление строк с
id
равными 2, 8 и 9 для реалистичности. - Выборка всех данных из таблицы
t
. - Обновление данных в таблице
t
с помощью подзапросаd
, который выбирает количество повторений каждой уникальной записи в полеn
и добавляет это количество в конец строки. - Выборка всех данных из таблицы
t
после обновления.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д