向用户展示参与项目

时间:2018-09-03 20:09:03

标签: mysql

开始时,我仅花了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

任何帮助都是值得的!预先感谢。

1 个答案:

答案 0 :(得分:1)

此查询将执行您想要的操作。从本质上说,要获得项目负责人和参与者的名称,您需要两次连接到用户表,首先是项目负责人的名称,然后是参与者的名称。如果项目中没有任何参与者,则还需要在参与者和第二个用户表上使用LEFT JOIN

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(here),向其中添加了比您更多的数据。这是输出:

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