Существует таблица MYSQL, которая имеет следующую структуру:
CREATE TABLE `data` (
`ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`objectID` INT(10) UNSIGNED NOT NULL,
`actionID` INT(10) UNSIGNED NOT NULL,
`year` DATE NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE INDEX `ID` (`ID`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
Со следующим содержимым:
ID objectID actionID year
1 1 1 2013
2 2 3 2013
3 1 7 2014
4 2 3 2014
5 1 4 2015
6 2 2 2015
Я делаю запрос следующего вида:
SELECT
objectID,
CASE year WHEN "2010" THEN actionID ELSE 0 END as "2013",
CASE year WHEN "2011" THEN actionID ELSE 0 END as "2014",
CASE year WHEN "2012" THEN actionID ELSE 0 END as "2015"
FROM data
И получаю следующий ответ (возможны несколько различных actionID для objectID в одном году):
objectID 2013 2014 2015
1 1
1 7
1 8
1 2
2 3
2 3
2 2
Вопрос заключается в том, смогу ли я и каким образом, при некой модификации запроса, получить ответ вида:
objectID 2013 2014 2015
1 1 7,8 2
2 3 3 2
Или:
objectID 2013 2014 2014 2015
1 1 7 8 2
2 3 3 2
При использовании GROUP BY objectID отображается только одна из строк на ряд:
objectID 2013 2014 2015
1 1
2 3
Решение, устроившее меня, на основе совета Mike:
SELECT
objectID,
group_concat(
DISTINCT CASE years WHEN "2013" THEN km_typeID END SEPARATOR '; '
) as "2013",
group_concat(
DISTINCT CASE years WHEN "2014" THEN km_typeID END SEPARATOR '; '
) as "2014",
group_concat(
DISTINCT CASE years WHEN "2015" THEN km_typeID END SEPARATOR '; '
) as "2015",
FROM data
GROUP BY objectID;
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники