【问题标题】:MySQL GROUP_CONCAT with inner CONCAT cutting out values? inconsequent resultsMySQL GROUP_CONCAT 与内部 CONCAT 剪切值?无关紧要的结果
【发布时间】:2018-05-18 15:50:16
【问题描述】:

我一直在尝试设置一个相当大的查询,它有一个 select 应该返回一个 group_concat(inated) 列,该列应该包含 4 个 concat(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 个结果,其中可能有空值,但有时每个 group_concat 只返回 3 或 2 个结果。 (即:273458||2658774||5 被返回)。

我如何确保至少总是返回一个空值? 如果需要,我可以显示大型查询。

-- 更新--

特此完整查询、有效数据示例、实际结果和所要求的预期结果。

完整查询:

我要将结果过滤到一种产品,因为有数以万计的结果。我也只会使用mysql_category_feature_products 列。

实际结果(注意最后一行):

预期结果(注意最后一行)和有效数据示例:

-- 更新(再次)--

最后一行的实际预期结果不是250258||2583482||null||6250258||2583482||47||67 不为空,我的错。

使用新的 ifnull 语句重新运行查询会为最后一行返回不同的结果:250258||2583482||4 而不是 250258||2583482||6

【问题讨论】:

  • 似乎很奇怪 .. 请 .. 更新您的问题,添加一个有效的数据样本、您的实际结果和预期结果 ..(以及完整的查询代码)
  • @scaisEdge 我已经更新了 OP。

标签: mysql concatenation


【解决方案1】:

您可以检查 null(在这种情况下,我添加了 - 字符,但您可以使用 '')

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

【讨论】:

  • 所以我在实际数据示例中有点太快了,因为 null 不应该再出现了。 (实际预期结果见新更新)。
  • GROUP_CONCAT 方法有长度限制吗?结果好像被截断了..
  • 是的..有一个 GROUP_CONCAT 限制..你可以改变..无论如何..与缺少列相关的问题是否已解决?
【解决方案2】:

因此,由于 MySQL 默认设置的默认 1024 个字符限制,结果被破坏了,这可以通过更改当前会话的长度来规避。见MySQL and GROUP_CONCAT() maximum length

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 2012-10-28
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2018-09-04
    • 2015-10-28
    • 2017-07-07
    相关资源
    最近更新 更多