Php MySQL-每行列出同一组的成员
我有两张桌子Php MySQL-每行列出同一组的成员,php,mysql,Php,Mysql,我有两张桌子 tbl_参与者 id group\u name firstname lastname tbl_组 id group\u name 但我很难将表格连接起来以显示下面的布局 Group Name | Member 1 | Member 2 | Member 3 名字和姓氏将显示在成员栏下 每组最多3名参与者 此查询显示列表,但不在上面的布局中: select gr.firstname, gr.lastname, gr.group_name from tbl_Participan
id
group\u name
firstname
lastname
id
group\u name
Group Name | Member 1 | Member 2 | Member 3
select gr.firstname, gr.lastname, gr.group_name
from tbl_Participants gr inner join tbl_Group gr2
ON gr.group_name = gr2.group_name
order by group_name
对于MySQl 8.0+,您可以使用
ROW_NUMBER()
window函数按字母顺序排列组内的成员名称,并在过滤每个组的前3个名称后,使用条件聚合来获得您想要的结果:
SELECT group_name,
MAX(CASE WHEN rn = 1 THEN name END) Member1,
MAX(CASE WHEN rn = 2 THEN name END) Member2,
MAX(CASE WHEN rn = 3 THEN name END) Member3
FROM (
SELECT group_name,
CONCAT(lastname, ' ', firstname) name,
ROW_NUMBER() OVER (PARTITION BY group_name ORDER BY lastname, firstname) rn
FROM tbl_Participants
) t
WHERE rn <= 3
GROUP BY group_name
请参阅简化版。如果在
tbl_组中有组
且tbl_参与者
中没有行,并且您希望他们出现在结果中,那么使用UNION ALL
比使用联接更容易。添加到上述查询:
UNION ALL
SELECT g.group_name, null, null, null
FROM tbl_Groups g
WHERE NOT EXISTS (
SELECT 1
FROM tbl_Participants p
WHERE p.group_name = g.group_name
)
请提供[mre]的数据,并阅读您想要的是像第一个一样透视加入组表的意义是什么,因为组名已经在参与者表中,所以您不使用它的任何内容?@ThomasG在点击编辑按钮后加入表以列出每个组的成员。我刚刚意识到查询以请求的格式列出结果,按组名称列组,但不能使用使用ID的编辑功能。我将考虑另一种方法,以便按组添加/删除参与者。如果我想不出一种基于上述查询的方法,可能会按参与者级别进行编辑。非常感谢。
UNION ALL
SELECT g.group_name, null, null, null
FROM tbl_Groups g
WHERE NOT EXISTS (
SELECT 1
FROM tbl_Participants p
WHERE p.group_name = g.group_name
)