Mysql 如何将组添加到我的联合查询中?

Mysql 如何将组添加到我的联合查询中?,mysql,Mysql,我有以下查询,可以很好地获得正确的电子邮件,并给出以下结果: - user1@company.com - user2@company.com -等 问题:如何添加MySQL GROUP_CONCAT函数以使结果用逗号分隔: - user1@company.com,user2@company.com等等 以下是我的工会查询的一部分: -当我给它一个票证号码时,它会检查票证上的票证类型值&只返回那些在后端表中检查了该类型的用户。 首先,请注意,GROUP_CONCAT函数受max_allowed_p

我有以下查询,可以很好地获得正确的电子邮件,并给出以下结果: - user1@company.com - user2@company.com -等

问题:如何添加MySQL GROUP_CONCAT函数以使结果用逗号分隔: - user1@company.com,user2@company.com等等

以下是我的工会查询的一部分:

-当我给它一个票证号码时,它会检查票证上的票证类型值&只返回那些在后端表中检查了该类型的用户。 首先,请注意,GROUP_CONCAT函数受max_allowed_packet变量的值限制,该变量通常设置为1048576,即1MB。当然,这个变量的值是可以增加的,但是请注意,它有一个限制

快速的答案是将整个查询包装在一组括号中,并在查询中将其作为行源引用。基本上,将查询转换为内联视图

SELECT GROUP_CONCAT(v.User_email)
  FROM (
         /* your UNION ALL query here */
       ) q
要删除重复项,可以使用DISTINCT关键字。要获取特定序列中的值,可以使用ORDERBY子句

SELECT GROUP_CONCAT(DISTINCT v.User_email ORDER BY v.User_email)
  FROM (
         /* your UNION ALL query here */
       ) q
再次注意,GROUP_CONCAT函数返回的字符串长度受max_allowed_packet的值限制

跟进问题:如何从列表中排除或过滤电子邮件。。例如:-如果SESSION.kt_email=列表中的一封电子邮件,则从列表中删除

答:快速的答案是举例说明。如果您有一个要排除的电子邮件地址,请在本例中使用“foo”:

SELECT GROUP_CONCAT( NULLIF(v.User_email,'foo') )
  FROM (
         /* your UNION ALL query here */
       ) q
这里的诀窍是我们用NULL替换'foo'的任何值,而GROUP_CONCAT将跳过任何NULL值并将其从返回字符串中排除

表达方式:

    NULLIF(v.User_email,'foo')
是以下的简写:

    IF(v.User_email='foo',NULL,v.User_email)
这相当于更符合ANSI标准:

    CASE WHEN v.User_email = 'foo' THEN NULL ELSE v.User_email END

当然,在我的示例中,您可以用您希望排除的字符串值或表达式替换文字“foo”。

spencer,这很好用&我在那里学到了一些新东西。。还有一件事。。如何从列表中排除或过滤电子邮件。。例如:-如果SESSION.kt_email=列表中的一封电子邮件,则从list@jlig:在组\u CONCAT中使用类似NULLIFv.User\u email、'foo'的表达式。我的答案会随着后续的更新而更新。我在ColdFusion页面上使用此查询,但没有做正确的事情:-如果我硬编码foo值,下面的代码可以工作。。选择GROUP_CONCAT NULLIF User_email,排除_user@company.comAS来自etc的用户_电子邮件…-但是当我尝试输入会话变量时,我收到了所有的电子邮件?选择GROUP_CONCAT NULLIF User_email、fooAS User_email FROM等。。看起来MySQL中的foo变量有问题吗?不确定如何在SELECT部分引用ColdFusion变量..?您不想做一些类似。。。选择GROUP_CONCATNULLIFv.User_电子邮件,作为?但话说回来,我不是一个冷静的人;我只是在猜测。ColdFusion不应该关心查询参数在语句中的位置,不管它是在SELECT列表中的表达式中还是在where子句中的表达式中;其他接口对查询参数的去向没有限制。spencer,以下内容最终用于过滤登录用户--------选择GROUP_CONCATNULLIFUser_email,作为来自etc的用户电子邮件-----------------但最后一个问题:-当没有电子邮件时,我需要它返回默认的电子邮件值no,而不是返回NULL-reply@company.com
    CASE WHEN v.User_email = 'foo' THEN NULL ELSE v.User_email END