聚合多个表并将某些列显示为一个

时间:2013-05-13 13:25:53

标签: php mysql formatting tabular

我在理解php-mysql查询时遇到了问题。使用这种查询,我尝试打印所有人(inco_person)与电子邮件(inco_phone)和分配给他们的电话号码(inco_email)。

但是,如果有一个以上的电话号码和电子邮件地址相对于一个人的身份怎么办?

现在,我为一个人提供了4行,其中包含不同的电子邮件和电话号码。如果有多个字段,有没有办法聚合某些字段?

$gsf = mysqli_query( $connector2 ,"SELECT * FROM inco_person
LEFT JOIN inco_person_position ON inco_person_position.person_id=inco_person.personid
LEFT JOIN inco_position ON inco_position.positionid=inco_person_position.position_id
LEFT JOIN inco_basic ON inco_basic.basicid=inco_person_position.company_id
LEFT JOIN inco_phone ON inco_phone.pp_id=inco_person_position.ppid
LEFT JOIN inco_email ON inco_email.pp_id=inco_person_position.ppid
ORDER BY inco_person.personid") or die(mysqli_error($connector2));

结果:

ID Firstname   Lastname    Position      E-Mail       Phone

1  Jacek       Kowalski    President    68-3284099    dyrektor@abc.com

1  Jacek       Kowalski    President    661320993    j.kowalski@abc.com

1  Jacek       Kowalski    President    661320993    dyrektor@abc.com

1  Jacek       Kowalski    President    68-3284099    j.kowalski@abc.com

2 个答案:

答案 0 :(得分:0)

只需添加group by inco_person.personid并通过group_concat GROUPING

阅读电话号码

答案 1 :(得分:0)

您可以使用GROUP BYGROUP_CONCAT

SELECT inco_person.personid, GROUP_CONCAT(inco_email.email SEPARATOR ' ') FROM inco_person
LEFT JOIN inco_person_position ON inco_person_position.person_id=inco_person.personid
LEFT JOIN inco_position ON inco_position.positionid=inco_person_position.position_id
LEFT JOIN inco_basic ON inco_basic.basicid=inco_person_position.company_id
LEFT JOIN inco_phone ON inco_phone.pp_id=inco_person_position.ppid
LEFT JOIN inco_email ON inco_email.pp_id=inco_person_position.ppid
GROUP BY inco_person_position.person_id ORDER BY inco_person.personid