group_concat вставляет двойные кавычки для пустых значений в mysql - PullRequest
0 голосов
/ 18 января 2020

У меня есть некоторые данные, хранящиеся в таблице в виде строки, разделенной запятыми, в столбце user_values, поэтому в соответствии с моим требованием я хочу получить указанные c пользовательские данные и значения, хранящиеся в столбце user_values, должны указываться в одинарных кавычках. ниже запроса, и он работает нормально, но если указан c пользователь не имеет никакого значения в столбце user_values, то ниже запроса получить user_values ​​с одной вставленной двойной кавычкой, однако он должен получить пустое значение для этого столбца, так как предотвратить двойную кавычку если столбец пуст для указанного пользователя c.

таблица

id    user_values
1     1,2
2     3,4,5
3              // empty / no value for this user
4     4,7

mysql запрос:

случай 1: если у пользователя 1 есть значения в столбце user_values, то

SELECT id,GROUP_CONCAT( CONCAT("'", REPLACE(user_values,",", "','") , "'")) as user_val 
FROM user 
WHERE id=1;

вывод:

вариант 2: если у пользователя нет никакого значения, вставка double в пустой столбец

SELECT id, GROUP_CONCAT( CONCAT("'", REPLACE(user_values,",", "','") , "'")) as user_val 
FROM user 
WHERE id=3;

вывод:

Ответы [ 2 ]

2 голосов
/ 19 января 2020

Я согласен с диагнозом проблемы GMB. Тем не менее, я думаю, что NULLIF() предоставляет более простое решение:

SELECT id,
       GROUP_CONCAT( NULLIF(CONCAT("'", REPLACE(user_values, ",", "','") , "'"), "''"
                    ) as user_val 
FROM user 
WHERE id = 3 ;
1 голос
/ 19 января 2020

Я подозреваю, что некоторые значения user_values являются пустыми строками (которые отличаются от null значений, которые group_concat() игнорирует). Вы можете обойти это с помощью выражения case в group_concat(), которое превращает пустые строки в значения null, например:

SELECT 
    id,
    GROUP_CONCAT(CASE
        WHEN user_values = '' THEN NULL 
        ELSE CONCAT("'", REPLACE(user_values,",", "','"), "'")
    END) as user_val 
FROM user 
WHERE id = 3;
...