1

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

我有一个数据库,用于保存我们业务前景的信息。我有一个关于列表信息的问题,供我们的用户查看。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 中,以便在返回的行中,我看到与列出的查询相关的所有潜在客户的列表,并用逗号分隔。

我希望我创建的网页中的表格具有以下列:

查询ID | 潜在客户姓名(姓氏在前)| 下一个行动日期

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

查询ID | 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 工作吗?

4

2 回答 2

1

You can COALESCE the columns in case the contain NULLs:

COALESCE(lastname, '') would return an empty string if lastname was null, or whatever the value of lastname is if it is not.

于 2011-09-23T01:35:14.503 回答
0

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

于 2014-07-14T20:05:15.113 回答