Здрасте!
Суть такая, есть таблицы:
mm_usat:
- id_user
- id_attribute
- value
attribute:
- id
- name
Нужно сделать горизонтальную таблицу вида:
id_user | attribute.name[1] | attribute.name[2] | ... | attribute.name[N]
где attribute.name[N] - это название атрибута с ID = N.
Пока дошел до такой процедуры:
CREATE PROCEDURE `my_user_attributes`()
BEGIN
SELECT id_user,
GROUP_CONCAT(if(id_attribute = 1,value,null)) as "prof_state",
GROUP_CONCAT(if(id_attribute = 10,value,null)) as "sex",
...
FROM mm_usat
GROUP BY id_user;
END
Как нибудь образом можно обернуть
GROUP_CONCAT в цикл с указанным списком IDs? Что-то вроде:
CREATE DEFINER=`u432051`@`%` PROCEDURE `my_user_attributes`()
BEGIN
SELECT id_user,
WHILE ... DO
GROUP_CONCAT(if(id_attribute = 1,value,null)) as "prof_state",
END WHILE;
FROM mm_usat
GROUP BY id_user;
END
Где условие цикла, это перебор списка ID (аналог FOREACH из PHP) ?
---
Щас что-то подумал: а на фиг мне нужен GROUP_CONCAT? По сути запрос:
CREATE DEFINER=`u432051`@`%` PROCEDURE `my_user_attributes`()
BEGIN
SELECT id_user,
(SELECT `value` FROM mm_usat WHERE id_attribute = 1) as 'Атрибут 1',
(SELECT `value` FROM mm_usat WHERE id_attribute = 2) as 'Атрибут 2',
...
FROM mm_usat
END
нужно преобразовать так, чтобы столбцы стали строками, НО
attribute.id идут не по порядку (строго говоря вообще не все они и нужны).