MySQL GROUP_CONCAT добавить косую черту - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь вернуть результаты опроса в формате JSON.Мой первый SQL это

SELECT
fa.pollQuestion_id, 
q.title, 
JSON_OBJECT(
    'text', qo.title, 
    'total', COUNT(fao.pollQuestionOption_id)
) values
FROM pollFillAnswers fa 
INNER JOIN pollFills f ON fa.pollFill_id = f.pollFill_id
INNER JOIN pollQuestions q ON fa.pollQuestion_id = q.pollQuestion_id
INNER JOIN pollFillAnswerOptions fao ON fao.pollFillAnswer_id = 
fa.pollFillAnswer_id 
WHERE f.poll_id = 17 AND fa.type IN (3,4,5) 
GROUP BY fao.pollQuestionOption_id;

Этот SQL возвращает что-то вроде этого:

pollQuestion_id значения заголовка

163 Вопрос 1 {"текст": "Нет", "всего": 599}

163 Вопрос 1 {" text ":" Si "," total ": 258}

Во втором SQL-запросе я использую GROUP BY pollQuestion_id и GROUP_CONCAT(values) для агрегированиярезультаты с этим SQL

SELECT JSON_OBJECT(
        'title', result.title, 
        'values', GROUP_CONCAT(values)
    ) answers 
    FROM (
        SELECT
            q.title,
            JSON_OBJECT(
                'text', qo.title, 
                'total', COUNT(fao.pollQuestionOption_id)
            ) values
        FROM pollFillAnswers fa 
        INNER JOIN pollFills f ON fa.pollFill_id = f.pollFill_id
        INNER JOIN pollQuestions q ON fa.pollQuestion_id = q.pollQuestion_id
        INNER JOIN pollFillAnswerOptions fao ON fao.pollFillAnswer_id = fa.pollFillAnswer_id 
        WHERE f.poll_id = 17 AND fa.type IN (3,4,5) 
        GROUP BY fao.pollQuestionOption_id
    ) AS result 
    GROUP BY result.pollQuestion_id;

Результат выглядит следующим образом:

163 {"title": "Question 1", "values": "{\"text\": \"No\", \"total\": 599},{\"text\": \"Si\", \"total\": 258}"}

group_contact() добавляет косые черты во все строки в JSON, почему?Я пытаюсь удалить косую черту с помощью REPLACE() или JSON_UNQUOTES(), но не могу устранить это поведение.

1 Ответ

0 голосов
/ 26 июня 2018

Пожалуйста, попробуйте приведенный ниже код один раз.и если вам не нужно, замените это на ''.

GROUP_CONCAT(REPLACE(values, ',', '\\,')) 
...