开始时,我仅花了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
任何帮助都是值得的!预先感谢。
答案 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