![](/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.