Json_Array с Group_Concat не дает ни одного массива строк

У нас есть 2 стола. Вопрос, в котором есть question, и ответы, в которых есть возможные answer для этого вопроса.

Я хочу собрать все вопросы так, чтобы все ответы на данный вопрос отображались в виде массива.

select Answers.question_Id as questionId, 
       group_concat(json_array(Answers.answer)) as answers
      from Question 
      inner join Answers 
      on Question.id = Answers.question_Id 
      group by questionId

Когда я попробовал выполнить вышеуказанный запрос, я получил следующий результат:

------------------------------------
questionId | answers
--------------------------
1          | ["1"],["2"],["3"],["4"]
------------------------------------

Итак, я попробовал следующий запрос:

select Answers.question_Id as questionId, 
          json_array(group_concat(Answers.answer)) as answers
          from Question 
          inner join Answers 
          on Question.id = Answers.question_Id 
          group by questionId

Я получаю следующий результат:


questionId | answers
--------------------------
1          | ["1,2,3,4"]
--------------------------

Я ищу ['1', '2', '3', '4']

Любые предложения, что было бы хорошим способом. Я также пробовал использовать только group_concat, но он разделяет вывод запятой и высока вероятность, что в ответе будет запятая. Искал простое решение.

Версия MySQL: 5.7.19

Зачем нужен вывод в формате JSON?

Tim Biegeleisen 23.03.2018 12:37

на самом деле мне это нужно в виде массива

j10 23.03.2018 13:37
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
2
1 562
1

Ответы 1

Если вы используете MySQL 5.7.22 или новее, вы можете использовать функцию JSON_ARRAYAGG:

SELECT
    a.question_Id AS questionId, 
    JSON_ARRAYAGG(a.answer) AS answers
FROM Question q
INNER JOIN Answers a
    ON q.id = q.question_Id 
GROUP BY
    a.question_Id

Мы используем MYSQL 5.7.19

j10 23.03.2018 13:37

Тогда вам может немного не повезти. Это может быть UDF. Вы используете MySQL с языком приложения, например Java или C#? Они легко справятся с вашими требованиями.

Tim Biegeleisen 23.03.2018 13:39

Другие вопросы по теме