Приветствую. Есть табличка:
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;
А хочу получить имена параметров в колонки. Вот так:
И я придумал 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 используется только для отладки и может вызывать тормоза при больших данных, так как результаты хочу джойнить в будущем. В общем я правильно составил запрос или нужно/можно как то по другому?