Вы почти у цели.Добавьте CONCAT
, чтобы получить идентификатор и запись вместе, или создайте отдельное предложение GROUP_CONCAT
для каждого.
SELECT article.*,
GROUP_CONCAT(CONCAT(tag.id,':',tag.name)) AS tags
FROM articles AS article
LEFT JOIN articles_tags_relations AS relation ON article.id = relation.article_id
LEFT JOIN tags AS tag ON relation.tag_id = tag.id
GROUP BY article.id
LIMIT 0,10
AFAIK. В GROUP_CONCAT
нет ничего особенного, что приведет к снижению производительности.
Просто для интереса приведем запрос, который вернет JSON
SELECT CONCAT('[',GROUP_CONCAT(CONCAT('[',row_data,']')),']') as JSON
FROM
(
SELECT CONCAT(a.id,',"',a.title,'",{',GROUP_CONCAT(CONCAT("'",tag.id,'":"',tag.name,'"')),'}') as row_data
FROM articles AS a
LEFT JOIN articles_tags_relations AS relation ON a.id = relation.article_id
LEFT JOIN tags AS tag ON relation.tag_id = tag.id
GROUP BY a.id
LIMIT 0,10
) t1