- первая таблица («Сообщения») содержит сообщения. (PostId, PostTitle, PostSummary, ...);
- вторая таблица («Теги») содержит теги (TagId, TagName, TagSlug);
< li>третья таблица («TagsMap») содержит теги, связанные с каждым сообщением (PostId, TagId).
Код: Выделить всё
SELECT p.PostTitle, p.PostSummary, ...,
JSON_OBJECTAGG(t.TagSlug, t.TagName)
FROM (SELECT ... FROM Posts WHERE ... ORDER BY ... DESC LIMIT 10) p
LEFT JOIN TagsMap tm ON p.PostId = tm.TagId
LEFT JOIN Tags t ON tm.TagName = t.TagId
GROUP BY p.PostId
ORDER BY p.PostId DESC
Проблема возникает, когда у публикации нет связанных тегов. В этом случае я получаю следующую ошибку:
Код: Выделить всё
"PDOException: SQLSTATE[22032]: : 3158 JSON documents may not contain NULL member names".
Как это исправить?
SQL Fiddle
Ожидаемый результат при использовании JSON_OBJECTAGG:
Заголовок 3 | Резюме 3 | NULL
Заголовок 2 | Резюме 2 | {"tag-slug-2": "имя тега 2", "tag-slug-3": "имя тега 3"
Заголовок 1 | Резюме 1 | {"tag-slug-1": "имя тега 1"
Подробнее здесь: https://stackoverflow.com/questions/786 ... -3158-json