Похоже, этот вопрос может быть актуальным.Однако это должно делать то, что вы хотите:
-- Table structure:
-- post(_id_), tag (_id_, tag), post_tag(post*, tag*)
SELECT post.id,
CONCAT('{', GROUP_CONCAT(distinct tag.tag order by tag.tag separator '}{'), '}') AS tags
FROM post
JOIN post_tag ON post.id = post_tag.post
JOIN tag ON post_tag.tag = tag.id
GROUP BY post.id
Что возвращает:
+----+--------+
| id | tags |
+----+--------+
| 1 | {A}{B} |
| 2 | {B}{C} |
| 3 | {C} |
+----+--------+
Обязательно включите предложение GROUP BY
.Я добавил ссылки на внешние ключи, но не уверен, использует ли MySQL их для этого.