У нас есть 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
на самом деле мне это нужно в виде массива






Если вы используете 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
Тогда вам может немного не повезти. Это может быть UDF. Вы используете MySQL с языком приложения, например Java или C#? Они легко справятся с вашими требованиями.
Зачем нужен вывод в формате JSON?