php - MySQL-PHP 多个成员并将名称加入日期

标签 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

最佳答案

使用 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

关于php - MySQL-PHP 多个成员并将名称加入日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38403828/

相关文章:

mysql - 选择一个表中的每一行以及另一个表中的相关行

php - sql IN 子句仅返回当前行,而不返回选定的行

mysql - 在 process.start 上使用 mysqldump 没有任何反应,但是当我在 cmd 上尝试参数时它正在工作

php - 我想要一个 map ,其中包含从用户插入的值以及数据库中的值

php - 有没有办法选择字符串中以空格分隔的第一个单词/字符组合?

php - 如何将png文件转换为webp文件

php - PHP 是否对数组设置内存限制?

php - 我想使用 php 为数组中的每个元素编写文件

mysql - SQL-选择不同值的计数

mysql - 为所有具有相同列名的表添加外键