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.
3 Réponses :
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.
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)
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.................
Il produit la liste des membres qui font partie d'un club. Pas un éventail de clubs avec des membres.
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;
}
}