Mysql 向用户显示项目的参与者

Mysql 向用户显示项目的参与者,mysql,Mysql,首先,我花了12个小时试图弄清楚这是如何工作的,我已经学习了很多术语和定义,但我无法正确理解。我研究过: 一对多关系 循环 阵列 加入 还有更多 我想实现的是在一个列表中显示所有项目,在项目名称旁边,我想显示项目负责人和每个项目的所有参与者(如果有的话) 现在的数据库结构是: DB: PROJECTS PROJECT_ID PROJECT_NAME PROJECT_LEADER 1 MY PROJECT 1 2 UPDATE THIS 1 3

首先,我花了12个小时试图弄清楚这是如何工作的,我已经学习了很多术语和定义,但我无法正确理解。我研究过:

一对多关系 循环 阵列 加入 还有更多

我想实现的是在一个列表中显示所有项目,在项目名称旁边,我想显示项目负责人和每个项目的所有参与者(如果有的话)

现在的数据库结构是:

DB: PROJECTS
PROJECT_ID  PROJECT_NAME  PROJECT_LEADER
1           MY PROJECT    1
2           UPDATE THIS   1
3           STATUS FIX    2

DB: USERS
USER_ID  USER_FIRSTNAME
1        ADAM
2        BRIAN

DB: PARTICIPANTS
PARTICIPANT_ID  PROJECT_ID  USER_ID
1               1           2
以及SQL查询:

SELECT *
FROM PROJECTS P
JOIN users u ON p.project_leader = u.user_id
这是我在运行查询时得到的结果:

MY PROJECT - ADAM
UPDATE THIS - ADAM
STATUS FIX - BRIAN
我想看到的是:

MY PROJECT - ADAM & BRIAN
UPDATE THIS - ADAM
STATUS FIX - BRIAN

任何帮助都是值得的!非常感谢。此查询将满足您的要求。基本上,为了获得项目负责人和参与者的姓名,您需要两次加入用户表,首先是项目负责人的姓名,然后是参与者的姓名。如果项目中没有任何参与者,还需要对参与者和第二个用户表使用左联接

SELECT P.PROJECT_NAME, U1.USER_FIRSTNAME AS PROJECT_LEADER, GROUP_CONCAT(U2.USER_FIRSTNAME) AS PARTICIPANTS
FROM PROJECTS P
JOIN USERS U1 ON U1.USER_ID = P.PROJECT_LEADER
LEFT JOIN PARTICIPANTS T ON T.PROJECT_ID = P.PROJECT_ID
LEFT JOIN USERS U2 ON U2.USER_ID = T.USER_ID
GROUP BY P.PROJECT_ID
我制作了一个SQLFiddle,向其中添加了比您更多的数据。这是输出:

PROJECT_NAME    PROJECT_LEADER  PARTICIPANTS
MY PROJECT      ADAM            JOHN,BRIAN
UPDATE THIS     ADAM            (null)
STATUS FIX      BRIAN           ADAM

这是一个真正的mysql问题,而不是PHP问题。删除PHP,谢谢!我把你的标签改成了mysql,它更合适,你的问题会有更多的浏览量。哇,谢谢尼克!工作就像一种魅力。试图弄清楚小组讨论的内容,但直到现在才真正了解,而且还用了那个SQLFiddle。再次感谢!如果是一个场景,那么是否有可能对组/参与者的输出进行分组,如果它是DB:Participants中具有相同用户id的用户参与者的副本?如何做到这一点?在群组中添加DISTINCT解决了这个问题:只看到了你的评论。听起来我根本不需要这么做我认为您可以通过将加入U2的条件更改为U2.USER_ID=T.USER_ID和U2.USER_ID!=项目负责人。对于第二部分,您应该能够使用`\`