簡體   English   中英

在三個表的查詢中。 如何在 SQL 中獲得一組團隊及其成員

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM