在mysql中使用GROUP_CONCAT进行CONCAT

时间:2011-09-22 18:36:01

标签: mysql group-concat concat

所以我到处寻找答案,但到目前为止还没有运气。任何帮助深表感谢。我是mysql的新手(从filemaker pro背景转移)。

我有一个数据库,我可以为我们的业务前景保留信息。我有一个关于列出信息的问题,供我们的用户查看。 查询表保存每个查询的信息(即日期查询,查询状态等)。 PROSPECT表保存有关每个潜在客户(潜在客户)的信息(即名字,姓氏,年龄等)。第三个表格,INQUIRYNOTES ,保存我们与潜在客户的联系信息(即下一个联系日期,备注,下一步行动等)。这些表中的每一个都与密钥 inquiryID 相关联。

每天用户都会进入一个屏幕,在那里他们将看到他/她将在当天跟进的线索/查询,这些查询的行动日期小于或等于今天。我希望该列表包含 inquiryID 列出的与该queryID相关的所有潜在客户的名称(最多2个)以及操作日期。< / p>

这是我到目前为止所尝试的内容:

SELECT inquiry.inquiryID,
   CASE WHEN prospect.lastName = '' THEN prospect.firstName
   WHEN prospect.firstName = '' THEN prospect.lastName
   ELSE CONCAT(prospect.lastName, ', ',prospect.firstName) END as fullName, inquiryNote.actionDate
FROM inquiry, prospect, inquiryNote
WHERE inquiry.inquiryID = prospect.inquiryID
AND inquiry.inquiryID = inquirynote.inquiryID
AND inquirynote.actionDate != \"0000-00-00\"
AND actionDate <= \"".date("Y-m-d")."\"
GROUP BY inquiryID ORDER BY actionDate";

这将返回我正在寻找的信息,但它只列出了一个潜在客户(即使有2个用于查询)。

接下来我尝试将GROUP_CONCAT(名字)放入其中,它给了我一个列表,其中列出了以逗号分隔的行中的前景(我越来越近了)。然后我尝试了GROUP_CONCAT(姓氏,',',名字),然后是GROUP_CONCAT(姓氏,名字),但是它再次只列出一个潜在客户,而不是用逗号分隔的多个潜在客户。

我希望在上面的代码中将我命名为 fullName 的变量包含在GROUP_CONCAT中,以便在返回的行中我看到与所有潜在客户相关的列表查询列出并用逗号分隔。

我希望我创建的网页中的表格包含以下列:

inquiryID | 潜在客户名称(姓氏优先) | 下一步行动日期

到目前为止,我似乎只能得到:

inquiryID | 1个潜在客户名称 | 下一个行动日期

解决方案可能很简单,但由于我是mysql的新手,我很遗憾。

如果您需要更多详细信息,请与我们联系。


更新解决方案,但最后有类似问题


问题是某些名字和姓氏字段的值为NULL。显然,GROUP_CONCAT现在将使用空值。这是我结束的查询,一旦我摆脱了所有的NULL值,就可以了:

SELECT 
  inquiry.inquiryID, 
  inquiry.initialDate,
  inquiryNote.actionDate,
  GROUP_CONCAT(DISTINCT
    CONCAT(
      CASE WHEN prospect.lastName = '' THEN prospect.firstName
      WHEN prospect.firstName = '' THEN prospect.lastName
       ELSE CONCAT(
        prospect.firstName, ' ',prospect.lastName
      ) END
    ) SEPARATOR ', '
  ) AS prospectList,

GROUP_CONCAT(DISTINCT
    CONCAT(
      CASE WHEN influencer.lastName = '' THEN influencer.firstName
      WHEN influencer.firstName = '' THEN influencer.lastName
      ELSE CONCAT(
        influencer.firstName, ' ',influencer.lastName
      ) END
    ) SEPARATOR ', '
  ) AS influencerList

FROM inquiry, prospect, inquiryNote, influencer WHERE inquiry.inquiryID = prospect.inquiryID
AND inquiry.inquiryID = inquirynote.inquiryID
AND inquiry.inquiryID = influencer.inquiryID
AND inquirynote.actionDate != "0000-00-00" AND actionDate <= "2011-09-22"
GROUP BY inquiryID
ORDER BY actionDate;

所以最后一个问题是,即使遇到NULL值,我能否使GROUP_CONCAT工作?

2 个答案:

答案 0 :(得分:1)

如果包含NULL,则可以对列进行COALESCE:

如果lastname为null,则COALESCE(lastname,'')将返回一个空字符串,如果不是lastname,则返回任何值。

答案 1 :(得分:0)

GROUP_CONCAT只是忽略(跳过)NULL值http://thinkdiff.net/mysql/mysql-the-group_concat-function/