1
votes

Dans une requête de trois tables. Comment obtenir un tableau d'équipes avec leurs membres en SQL

J'ai 3 tables: Teams, Members & Records. Comment créer une requête SQL pour que je puisse lister toutes les équipes avec leurs membres.

T1: Tableau Équipes

$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
                         ");

T2: Table des membres

id_record      id_team    id_member
-----------------------------------
   1             2           3
   2             1           2
   3             1           3
   4             2           4

T3: table Enregistrements

id_member      name
------------------------
   1           John  
   2           Lola
   3           Nancy
   4           Peter

Voici ce que Je l'ai pour le moment.

id_team      name
------------------------
   1           Green team
   2           Blue Team

Je dois lister toutes les équipes avec leurs membres. Ce que j'ai ci-dessus énumère tous les membres qui ont une équipe.

Quelque chose comme ceci:

L'équipe verte a Lola et Nancy comme membres. P >

L'équipe bleue a John et Peter comme membres.


0 commentaires

3 Réponses :


2
votes
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
Also keep in mind that generally you should name tables after singular nouns not plural nouns and the primary key id columns could be named better (i.e. just id) since its already assumed.The above solution will not show teams that do not have any records since its a left join on the records table.  If you wanted to see teams/members that do not have records you would need to do a full join.

1 commentaires

Hé merci pour votre aide. Encore une fois, j'obtiens une liste de membres appartenant à des équipes. J'ai besoin d'une liste d'équipes avec leurs membres. array (size = 3) 0 => array (size = 1) 'name' => string 'John' (length = 15) 1 => array (size = 1) 'name' => string 'Lola' (length = 8) 2 => tableau (taille = 1) 'nom' => chaîne 'Nancy' (longueur = 4)



1
votes
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
Try this it will works.................

1 commentaires

Il produit la liste des membres qui font partie d'un club. Pas un éventail de clubs avec des membres.



0
votes

J'ai donc pensé à ça jusqu'à présent et ça marche. Veuillez commenter si la syntaxe est correcte ou améliorer si possible.

$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;
   }
}


0 commentaires