@agsidorov

Как продублировать строку в mysql?

Здравствуйте. Ситуация следующая, есть таблица с записями, есть поле в котором может быть как одно так и несколько значений через запятую (Группа1, группа2, группа3 и тд).
Как вот бы так сделать чтобы запись где несколько значений клонировалась по количеству этих значений, то есть запись для Группа1, запись для Группа2 и тд
  • Вопрос задан
  • 2641 просмотр
Решения вопроса 1
Сделать можно, но, скорее всего, у вас проблемы с моделью данных. Если возникает такая задача, то группы выносятся в отдельную таблицу и делается связь с исходной таблицей.
Если же нужно именно с такой моделью, то вот запрос:
SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(groups, ',', g.n), ',', -1) groupName
FROM (
    SELECT @n:=@n+1 n FROM 
      (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) s0,
      (select 0 union all select 1 union all select 3 union all select 4 union all select 5 union all select 6 union all select 6 union all select 7 union all select 8 union all select 9) s1,
      (SELECT @n:=0) sg
    ) g
    JOIN Item ON CHAR_LENGTH(groups)-CHAR_LENGTH(REPLACE(groups, ',', '')) >= g.n-1
ORDER BY id, n


Вот ссылка на рабочий пример на sqlfiddle. Этот пример предполагает, что у каждой записи не более 100 групп. Если их всегда меньше 10, то таблицу s1 можно убрать из запроса.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы