![](/img/trans.png)
[英]I have 2 MySql tables. How to get not all data from them in 1 sql query?
[英]In a query of three tables. How to get an array of teams with their members in SQL
我有 3 个表:团队、成员和记录。 如何进行 SQL 查询,以便我可以列出所有团队及其成员。
T1:团队表
id_team name
------------------------
1 Green team
2 Blue Team
T2:成员表
id_member name
------------------------
1 John
2 Lola
3 Nancy
4 Peter
T3:记录表
id_record id_team id_member
-----------------------------------
1 2 3
2 1 2
3 1 3
4 2 4
这就是我现在所拥有的。
$teams = lib::$db->GetAll("SELECT SQL_CALC_FOUND_ROWS
t.*,
t.name AS team_name
FROM teams AS t
LEFT JOIN records r ON t.id_team = r.id_team
LEFT JOIN members m ON r.id_members = m.id_member
");
我需要列出所有团队及其成员。 我上面列出的是所有拥有团队的成员。
像这样的东西:
绿色团队有 Lola 和 Nancy 作为成员。
蓝队有约翰和彼得作为成员。
Select t.name, m.name
FROM records as r
LEFT JOIN teams t ON t.id_team = r.id_team
LEFT JOIN members m ON m.id_member == r.id_member
还要记住,通常你应该在单数名词而不是复数名词之后命名表,并且主键 id 列可以更好地命名(即只是 id),因为它已经假设了。
上述解决方案不会显示没有任何记录的团队,因为它在记录表上是左连接。 如果您想查看没有记录的团队/成员,您需要完全加入。
SELECT T.NAME, M.NAME
FROM TEAMS T JOIN RECORDS R ON T.ID_TEAM=R.ID_TEAM
JOIN MEMBERS M ON R.ID_MEMBER=M.ID_MEMBER
试试这个它会工作........
所以到目前为止我想出了这个并且它有效。 请评论语法是否正常或尽可能改进。
$teams = lib::$db->GetAll("SELECT
t.*,
t.name AS team_name
FROM teams t
GROUP BY t.id_team");
if (!empty($teams )) {
foreach($teams as &$team) {
$teamId= (int) $team['id_team'];
$teamMember = lib::$db->GetAssoc("SELECT
r.*,
GROUP_CONCAT(m.name) AS member_name
FROM records AS r
LEFT JOIN members AS m ON r.id_member = m.id_member
WHERE id_team = $teamId
GROUP BY r.id_record");
$team['records'] = $teamMember;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.