У меня есть этот большой процедурно сгенерированный запрос MySQL. В части этого запроса я должен объединить разделенные ячейки в одну ячейку. Это связано с тем, что у человека может быть более одной записи в форме (в случае тех же данных, которые мне были предоставлены, это автомобили, дома, велосипеды и коляски). Я могу использовать GROUP_CONCAT, чтобы сделать его одним полем, каждое из которых разделено, и это работает очень хорошо, но есть проблема.
У некоторых людей не заполнена вся информация, так что возьмем, к примеру, автомобили, их три, но у одного есть фотография, а это оказывается третье. Итак, я все результаты, но не в исходном порядке
что у меня в таблице
ID# | OWNERID# | make | model | year | picture ----+----------+---------+-----------+------+------------- 1 | 3 | corolla | gt-s | 1986 | 2 | 3 | fit | V6 | 2001 | 3 | 3 | starlet | GT | 1981 | car.jpg 4 | 4 | F-150 | SuperDuty | 2010 | 5 | 5 | beetle | | 1968 |
когда я запускаю свой запрос GROUP_CONCAT, я получаю это
ID# | OWNERID# | make | model | year | picture ----+----------+---------------------+------------+----------------+------------- 1 | 3,3,3 | corolla,fit,starlet | gt-s,V6,GT | 1986,2001,1981 | car.jpg 4 | 4 | F-150 | SuperDuty | 2010 | 5 | 5 | beetle | | 1968 |
но я хочу получить это
ID# | OWNERID# | make | model | year | picture ----+----------+---------------------+------------+----------------+------------- 1 | 3,3,3 | corolla,fit,starlet | gt-s,V6,GT | 1986,2001,1981 | ,,car.jpg 4 | 4 | F-150 | SuperDuty | 2010 | 5 | 5 | beetle | | 1968 |
обратите внимание на две запятые в "carimage.jpg"
Проблема, похоже, сосредоточена вокруг самой первой части запроса SELECT GROUP_CONCAT(cfv.value) FROM cf_customfield_values cfv
. Я пробовал несколько вещей, чтобы заставить его вести себя так, как мне нужно.
Использование IFNULL внутри GROUP_CONCAT для изменения нулевых значений на что-то другое
Немного переместив IFNULL, чтобы посмотреть, смогу ли я получить лучший результат
Использование традиционного оператора IF для изменения нулей на что-то другое
Использование COALESCE, чтобы убедиться, что всегда был хотя бы 1 не-NULL
Связывание строки с началом и / или концом значения, чтобы оно всегда имело жало и, следовательно, не было NULL
Я даже пробовал сделав его GROUP_CONCAT ('test'), что дало понять, что на самом деле не имеет значения, что там находится, он все равно поймет, что это NULL, и не будет его объединять.
Причина, по которой я действительно хочу это сделать, заключалась в том, чтобы затем я мог разбить объединенные значения на подтаблицы для отображения (очевидно, я бы использовал что-то большее, чем запятую, чтобы предотвратить любые возможные ошибки в части сценариев отображения).
Вау, это было дольше, чем я думал, TLDR; мне нужен GROUP_CONCAT, чтобы объединять нули так же, как значения.
Каким должен быть результат? По чему вы группируетесь? У вас их 2, когда я запускаю свой запрос GROUP_CONCAT, я получаю this в вашем вопросе с двумя разными результатами.
ПОЛНЫЙ SQL