MySQL GROUP_CONCAT с внутренними значениями CONCAT вырезать?непоследовательные результаты - PullRequest
0 голосов
/ 18 мая 2018

Я пытался настроить довольно большой запрос, в котором есть выборка, которая должна возвращать столбец group_concat (inated), который должен содержать ровно 4 конкатных (inated) результата, которые являются результатом более крупного запроса.

Я покажу выбор, чтобы устранить любую путаницу (надеюсь):

# Group the local category_feature_product.id, local feature value -
# and external feature value for the product together.
GROUP_CONCAT(
    CONCAT(cfpt.category_feature_product_id, '||', pcfpt.category_feature_product_id, '||', cfpt.value, '||', pcfpt.value)
    SEPARATOR ';'
) AS mysql_category_feature_products

Я ожидаю, что приведенный выше запрос всегда будет возвращать 4 результата, могут ли в нем быть нули или нет, но иногдатолько возвращает 3 или 2 результата для group_concat.(то есть: 273458||2658774||5 возвращается).

Как я могу убедиться, что по крайней мере ВСЕГДА возвращается ноль?Я мог бы показать большой запрос, если это необходимо.

- ОБНОВЛЕНИЕ -

При этом полный запрос, пример действительных данных, фактический результат и ожидаемый результат согласно запросу.

Полный запрос:

Я собираюсь отфильтровать результаты до одного продукта, так как есть десятки тысяч результатов.Я также буду использовать только столбец mysql_category_feature_products.

Фактический результат (обратите внимание на последнюю строку):

Ожидаемый результат (обратите внимание на последнюю строку) и пример действительных данных:

- ОБНОВЛЕНО (СНОВА) -

Фактический ожидаемый результат для последней строки не является 250258||2583482||null||6 НО 250258||2583482||47||67 не нулевым, мой плохой.

Повторный запрос с новым ifnullоператор возвращает другой результат для последней строки: 250258||2583482||4 вместо 250258||2583482||6

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Таким образом, результаты были искажены из-за ограничения по умолчанию в 1024 символа, установленного MySQL по умолчанию, этого можно обойти, изменив длину текущего сеанса.см. MySQL и GROUP_CONCAT () максимальная длина

0 голосов
/ 18 мая 2018

вы можете проверить на ноль (в этом случае я добавлю символ -, но вы можете использовать '')

GROUP_CONCAT(
    CONCAT(ifnull(cfpt.category_feature_product_id, '-')
    , '||'
    , ifnull(pcfpt.category_feature_product_id, '-')
    , '||'
    , ifnull(cfpt.value,'-')
    , '||'
    , ifnull(pcfpt.value,'-')
    SEPARATOR ';'
) AS mysql_category_feature_products
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...