MySQL-PHP多个成员和连接名称到日期

时间:2016-07-15 19:32:09

标签: php mysql

我有一张'成员'看起来如下。在尝试整理邮件列表时,我发现地址很简单。另一方面,这些名字并非如此。

| id | firstName | lastName | mbrGrpNum | mbrGrpNumID | dateJoined |
--------------------------------------------------------------------
| 1  | Jane      | Whitmore | 100100    | 01          | 2016-01-01 |
| 2  | Bob       | Whitmore | 100100    | 02          | 2014-02-01 |
| 3  | Carol     | Evans    | 100101    | 01          | 2012-02-01 |
| 4  | Bob       | Roahns   | 100101    | 02          | 2015-09-28 |
| 5  | Corry     | Roahns   | 100101    | 03          | 2014-09-28 |

基于mbrGrpNum,我希望得到的输出是这样的;

1 Whitmore, Jane (01/16) & Bob (02/14)
2 Evans, Carol (02/12) & Rohns, Bob (09/15) & Corry (09/14)

最多可能有六个人具有相同的mbrGrpNum(基本上是一个家庭成员),所有人都有不同的mbrGrpNumID

2 个答案:

答案 0 :(得分:2)

使用CONCAT连接一行中的列,GROUP_CONCAT连接组中的所有列。

SELECT GROUP_CONCAT(
        CONCAT(lastName, ', ', firstName, ' (',
                DATE_FORMAT(dateJoined, '%m/%y'), ')')
        SEPARATOR ' & ') AS members
FROM members
GROUP BY mbrGrpNum

要组合具有相同姓氏的成员,您需要使用子查询来查找它们。

SELECT GROUP_CONCAT(CONCAT(lastName, ', ', family_members) SEPARATOR ' & ') AS members
FROM (
    SELECT mbrGrpNum, lastName,
            GROUP_CONCAT(
                CONCAT(firstName, ' (', DATE_FORMAT(dateJoined, '%m/%y'), ')') SEPARATOR ' & ') AS family_members
    FROM members
    GROUP BY mbrGrpNum, lastName) AS families
GROUP BY mbrGrpNum

DEMO

答案 1 :(得分:0)

@barmar是否可以加入表格的全部内容(即'地址')"合并成员" concat(上面列出的第二个)用地址信息得到连接的输出?