Задавайте вопросы, мы ответим
Вы не зашли.
Здраствуйте, собственно проблема:
есть таблица table1 вида:
id | some_id | attr_name | attr_value
1 1 attr1 value1
2 1 attr2 value2
3 2 attr1 value3
4 2 attr2 value4
Нужно из table1 сделать table2:
some_id | attr1 | attr2
1 value1 value2
2 value3 value4
Как это можно сделать?
Отредактированно gilnator (29.09.2011 09:54:24)
Неактивен
Описание какое-то странное, от куда в примере взялось value4?
Отредактированно Александр Трофимов (28.09.2011 21:42:07)
Неактивен
Добавлю еще свой вариант:
INSERT INTO table2
SELECT some_id, CONCAT(IF(attr_name='attr1', attr_value, '')), CONCAT(IF(attr_name='attr2', attr_value, ''))
FROM table1
GROUP BY some_id;
Если значения не текстовые, а числовые, — возможно, лучше подойдет
MAX() вместо CONCAT().
Неактивен
Хм, хороший вариант. +)
Неактивен
Спасибо Александр, спасибо paulus!
Поправил value4. Да, у som_id может не быть какого-нибудь атрибута в table1.
Осталась проблема:
Аттрибутов может быть много - attr1 ... attrN. ( attrX - это пример. А так они имеют нормальное название)
В таблице table2 уже есть все колонки для всех возможных аттрубутов attr1 ... attrN.
Как решить задачу без привязки к именам атрибутов - IF(attr_name='attr1', attr_name='attr2', ... ? Чтобы все их не указывать?
Таких таблиц много. Т.е. не только table1:table2, а table3:table4, table5:table6 и набор аттрибутов может быть разный. Я хочу оформить в виде процедуры с передачей двух параметров table1,table2...
пс. прошу прощения за не совсем ясное описание...
Отредактированно gilnator (29.09.2011 10:27:49)
Неактивен
Вам в любом случае прийдется создавать таблицу с соответствующим
количеством столбцов. В результате Вам прийдется в любом случае
перебирать параметры явно.
Неактивен