Задать вопрос
rpsv
@rpsv
делай либо хорошо, либо никак

Как вложить GROUP_CONCAT в WHILE?

Здрасте!

Суть такая, есть таблицы:

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 идут не по порядку (строго говоря вообще не все они и нужны).
  • Вопрос задан
  • 184 просмотра
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы