【问题标题】:CONCAT with GROUP_CONCAT in mysqlCONCAT 与 GROUP_CONCAT 在 mysql
【发布时间】:2011-11-23 02:21:59
【问题描述】:

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

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

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

这是我迄今为止尝试过的:

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(firstname) 放入其中,它给了我一个潜在客户的名字列表,以逗号分隔(我越来越近了)。然后我尝试了 GROUP_CONCAT(last name, ', ', firstname) 和 GROUP_CONCAT(lastname,firstname),但它只会列出一个潜在客户,而不是用逗号分隔的多个潜在客户。

我希望我在上面的代码中命名为 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;

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

【问题讨论】:

  • 你很可能想要GROUP_CONCAT(CONCAT(lastname, ', ', firstname))

标签: mysql group-concat concat


【解决方案1】:

如果包含 NULL,您可以合并列:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-09-04
      • 1970-01-01
      • 2012-11-07
      • 2021-11-24
      • 2019-01-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      相关资源
      最近更新 更多