Recosh
@Recosh
Программист студент

Как правильно составить запрос в MySQL, представив таблицу с параметрами как колонка-значение?

Приветствую. Есть табличка:
CREATE TABLE `applications_custom_var` (
  `applications_custom_var_id` int(11) NOT NULL,
  `id` int(11) NOT NULL,
  `param` varchar(244) NOT NULL,
  `value` varchar(244) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `applications_custom_var` (`applications_custom_var_id`, `id`, `param`, `value`) VALUES
(1, 300000, 'z1', '1'),
(2, 300000, 'z2', '2'),
(3, 300001, 'z1', '3'),
(4, 300001, 'z4', '22'),
(5, 300000, 'z4', 'vasya');

ALTER TABLE `applications_custom_var`
  ADD PRIMARY KEY (`applications_custom_var_id`),
  ADD KEY `id` (`id`),
  ADD KEY `id_param` (`id`,`param`);

ALTER TABLE `applications_custom_var`
  MODIFY `applications_custom_var_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;


5dc404ff06d0f866125711.png

А хочу получить имена параметров в колонки. Вот так:
5dc4056e0aae8091932040.png

И я придумал SQL запрос который это делает:
SELECT 
`id`, 
GROUP_CONCAT(IF(param = 'z1', `value`, null)) AS `z1`, 
GROUP_CONCAT(IF(param = 'z2', `value`, null)) AS `z2`, 
GROUP_CONCAT(IF(param = 'z3', `value`, null)) AS `z3`, 
GROUP_CONCAT(IF(param = 'z4', `value`, null)) AS `z4`
FROM `applications_custom_var`
WHERE `id` IN(300000, 300001)
GROUP BY `id`


Но как мне кажется GROUP_CONCAT используется только для отладки и может вызывать тормоза при больших данных, так как результаты хочу джойнить в будущем. В общем я правильно составил запрос или нужно/можно как то по другому?
  • Вопрос задан
  • 96 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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