@samakin
Создаю веб-сайты с 1996 года. Вечно учусь.

Как значения из списка поля в mysql трансформировать в новые строки?

приветствую!
Есть таблица, в одной из колонок которой, есть список значений, разделенных запятой.
Как сделать запрос, чтобы на выходе для каждого значения из списка выводилась отдельная строка, где все колонки были бы идентичны, а менялось только значение одного столбика?
Не знаю, понятно ли объяснил..

Вот поля - img, itemref, brand, partnumber.
В поле partnumber иногда есть такое "000 180 26 09, 000 989 94 02 13ALEE, 000 989 94 02 11ALEE, 51937, 259.150.100"

мне нужно на выходе:

img,itemref,brand,000 180 26 09
img,itemref,brand,000 989 94 02 13ALEE
img,itemref,brand,000 989 94 02 11ALEE
img,itemref,brand,51937
img,itemref,brand,259.150.100

большое спасибо за помощь!
  • Вопрос задан
  • 27 просмотров
Пригласить эксперта
Ответы на вопрос 2
Можно создать хранимую процедуру, которая будет проделывать данную выборку.
Будет создаваться временная таблица tmp_table которая будет копировать по структуре вашу таблицу с данными (test_procedure)

Процедура
DROP PROCEDURE IF EXISTS box;
DELIMITER //
CREATE PROCEDURE box(id INT(11))
BEGIN 
DECLARE i INT DEFAULT 3;

SET @comma := '';
SET @img := '';
SET @itemref := '';
SET @brand := '';
SET @partnumber := '';
SET @partnumber_tansform := '';

SET @tmp_field := (SELECT CONCAT(@comma := (CHAR_LENGTH(tp.partnumber) - CHAR_LENGTH(REPLACE(tp.partnumber,',',''))) div CHAR_LENGTH(','),
											@img := tp.img,
											@itemref := tp.itemref,
											@brand := tp.brand,
											@partnumber := tp.partnumber)
						FROM test_procedure tp WHERE tp.id = id);

SET i = @comma;

DROP TABLE IF EXISTS `tmp_table`;
CREATE TEMPORARY TABLE `tmp_table` LIKE `test_procedure`;

WHILE i>0 DO

SET @partnumber_tansform := (SUBSTRING_INDEX(SUBSTRING_INDEX(@partnumber, ',', i), ',', -1));
INSERT INTO tmp_table(img, itemref, brand, partnumber) VALUES (@img, @itemref, @brand, @partnumber_tansform);

SET i = i-1;
END WHILE;
SELECT * FROM tmp_table;
END
//


Вызывать так, передавая id записи
CALL box(1);
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Как они попали все в одну колонку?! Разберитесь с этим!
2. Если п.1 никак не исправить (импорт), то используйте PHP-скрипт с регуляркой для удобной модификации БД.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SaveTime Москва
от 160 000 ₽
Blogman Санкт-Петербург
от 90 000 до 160 000 ₽
02 апр. 2020, в 16:49
15000 руб./за проект
02 апр. 2020, в 16:41
2000 руб./за проект
02 апр. 2020, в 16:33
10000 руб./за проект