我有一个包含member_id
,member_name
,club_name
,region
,zone
,email
作为字段的表成员。
我正在使用MySQL group_concat
函数,如
SELECT group_concat(distinct m.email
SEPARATOR ', ' ) from member m group by m.club_name
这很好用。但我希望能够group_concat
在其他字段上创建其他查询。
是否可以将其他字段作为参数提供?
member_id member_name club_name region zone email
1 member1 A 1 1 email1@example.com
2 member2 A 1 1 email2@example.com
3 member3 B 1 1 email3@example.com
4 member4 C 1 2 email4@example.com
5 member5 D 2 1 email5@example.com
**group by club**
email1@example.com,email2@example.com
email3@example.com
email4@example.com
email5@example.com
**group by region**
email1@example.com, email2@example.com, email3@example.com, email4@example.com
email5@example.com
**group by zone**
email1@example.com, email2@example.com, email3@example.com
email5@example.com
假设每个区域都有3个区域,每个区域都有多个区域。现在,我如何获得可以分组或与地区,区域或俱乐部相关的电子邮件?
答案 0 :(得分:8)
很难从你的问题中完全理解你是什么,但你可以尝试
SELECT club_name,
GROUP_CONCAT(DISTINCT email SEPARATOR ', ' ) emails,
GROUP_CONCAT(DISTINCT member_name SEPARATOR ', ' ) members
...
FROM member
GROUP BY club_name
示例输出:
| CLUB_NAME | EMAILS | MEMBERS | ------------------------------------------------------------------------ | Club1 | m1@mail.com, m2@mail.com, m3@mail.com | Jhon, Mark, Beth | | Club2 | m4@mail.com, m5@mail.com | Helen, Thomas |
这是 SQLFiddle 演示
旁注: 在这样的问题中提供样本数据和所需的输出通常会改善您更快地获得答案并最符合您需求的更改。 < / p>
更新:如果符合您的要求,您可以使用GROUP_CONCAT()
使用不同的分隔符深度打包信息
SELECT 'club' group_type, GROUP_CONCAT(details SEPARATOR '|') details
FROM
(
SELECT CONCAT(club_name, ';', GROUP_CONCAT(DISTINCT email)) details
FROM member
GROUP BY club_name
) a
UNION ALL
SELECT 'region' group_type, GROUP_CONCAT(details SEPARATOR '|') details
FROM
(
SELECT CONCAT(region, ';', GROUP_CONCAT(DISTINCT email)) details
FROM member
GROUP BY region
) a
UNION ALL
SELECT 'zone' group_type, GROUP_CONCAT(details SEPARATOR '|') details
FROM
(
SELECT CONCAT(zone, ';', GROUP_CONCAT(DISTINCT email)) details
FROM member
GROUP BY zone
) a
示例输出:
| GROUP_TYPE | DETAILS | ----------------------------------------------------------------------------------------------------------------------- | club | A;email1@example.com,email2@example.com|B;email3@example.com|C;email4@example.com|D;email5@example.com | | region | 1;email1@example.com,email2@example.com,email3@example.com,email4@example.com|2;email5@example.com | | zone | 1;email1@example.com,email2@example.com,email3@example.com,email5@example.com|2;email4@example.com |
这是 SQLFiddle 演示
如果您在客户端使用php,则可以在迭代结果集时使用details
轻松地将explode()
列展开到单独的记录中。