Возвращение массива объектов json из SQL - PullRequest
0 голосов
/ 23 апреля 2019

Я новичок в SQL, так что это может быть глупый вопрос, но у меня возникают проблемы с поиском возврата массива объектов JSON.

Мой код:

SELECT JSON_OBJECT(
            'title', pc.title,
            'reviews', (SELECT CAST(CONCAT('[',
                GROUP_CONCAT(
                    JSON_OBJECT(
                        'username',r.uname,
                        'review',r.review,
                        'date', r.date_added
                    )
                )
            , ']')
            AS JSON) FROM reviews r WHERE pc.pid=r.pid)
        ) AS JSON
        FROM product_comp AS pc;

Когда нет обзоров, он правильно возвращает пустой массив, а когда есть один отзыв, он возвращает этот обзор в массиве.Но если есть несколько обзоров, он возвращает пустой массив.Чего мне не хватает?

1 Ответ

1 голос
/ 23 апреля 2019

Вместо выполнения склонной к ошибкам работы по форматированию JSON с использованием CONCAT попробуйте использовать JSON_ARRAYAGG () .

SELECT JSON_OBJECT(
  'title', pc.title,
  'reviews', JSON_ARRAYAGG(
               JSON_OBJECT(
                 'username', r.uname,
                 'review', r.review,
                 'date', r.date_added
               )
             )
)
FROM product_comp AS pc
LEFT OUTER JOIN reviews AS r ON pc.pid = r.pid
GROUP BY pc.pid

Я не проверял это, но он должен дать вамправильная идея.

...