Найти одинаковые значения и переименовать - MySQL

Узнай цену своей работы

Формулировка задачи:

Такой вопрос нужно сделать выборку всех одинаковых имен находящихся в post_name и вывести. Это сделано:
SELECT `post_name`, COUNT(*) AS `count` FROM `dff_posts` GROUP BY `post_name` HAVING `count` > 1
Нужно теперь переименовать все найденные например добавить -1 т.е. было ezoton ezoton ezoton vitor vitor vitor нужно получить ezoton-1 ezoton-2 ezoton-3 vitor-1 vitor-2 vitor-3

Решение задачи: «Найти одинаковые значения и переименовать»

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;

Объяснение кода листинга программы

  1. Создание таблицы t с полями id, n и ограничением первичного ключа pk_id.
  2. Вставка 10 строк данных в таблицу t с разными значениями в поле n.
  3. Удаление строк с id равными 2, 8 и 9 для реалистичности.
  4. Выборка всех данных из таблицы t.
  5. Обновление данных в таблице t с помощью подзапроса d, который выбирает количество повторений каждой уникальной записи в поле n и добавляет это количество в конец строки.
  6. Выборка всех данных из таблицы t после обновления.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы