merci pour ton retour :
voici les tables
voici les tables :
table ecole : ecole_id | ecole_nom cle primaire ecole_id
table eleve : eleve_id | ecole_id cle primaire eleve_id et clé etrangere ecole_id
table sport : sport_id | sport_nom cle primaire sport_id
table sporteleve : sporteleve_id | eleve_id | sport_id cle primaire sporteleve_id et cles etrangeres eleve_id et sport_id
je veux faire en une requête ou plusieurs
pour chaque école :
nom de l'école
nombre d'élèves
nombre d'élève pratiquant au moins un sport
nombre de sport pratiqué
liste des sports avec le nombre d'élèves pratiquant le sport.
en une requête je n'ai pas trouver la solution avec une dizaine d'heure de recherche.
j'ai presque réussit avec 2 requêtes mais j'ai un problème au niveau de la liste des sports :
voici mes deux requêtes :
// Connexion à la base de données
try {
$db = new PDO('mysql:host=localhost;dbname=statecol', 'root', '');
} catch (PDOException $e) {
echo 'Erreur de connexion : ' . $e->getMessage();
exit();
}
// Requête SQL
$sql = "SELECT e.ecole_id, e.ecole_nom,
COUNT(DISTINCT el.eleve_id) AS nombre_eleves,
COUNT(DISTINCT se.eleve_id) AS nombre_eleves_sportifs,
COUNT(DISTINCT se.sport_id) AS nombre_activites_sportives
FROM ecole e
LEFT JOIN eleve el ON e.ecole_id = el.ecole_id
LEFT JOIN sporteleve se ON el.eleve_id = se.eleve_id
GROUP BY e.ecole_id, e.ecole_nom;"
;
// Exécution de la requête
$stmt = $db->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// Requête SQL1
$sql1 =
"SELECT
e.ecole_id,
e.ecole_nom,
COUNT(DISTINCT se.sport_id) AS nombre_activites_sportives,
s.sport_id,
s.sport_nom,
COUNT(DISTINCT se.eleve_id) AS nombre_eleves_pratiquant
FROM
ecole e
LEFT JOIN
eleve el ON e.ecole_id = el.ecole_id
LEFT JOIN
sporteleve se ON el.eleve_id = se.eleve_id
LEFT JOIN
sport s ON se.sport_id = s.sport_id
GROUP BY
e.ecole_id, e.ecole_nom, s.sport_id, s.sport_nom
ORDER BY
e.ecole_id, nombre_eleves_pratiquant ASC"
;
// Exécution de la requête
$stmt1 = $db->prepare($sql1);
$stmt1->execute();
$result1 = $stmt1->fetchAll(PDO::FETCH_ASSOC);
?>
voici mon code pour l'affichage :
if (count($result) > 0) {
foreach ($result as $row) {
//print_r($row);
echo "<strong>École ID:</strong> " . $row["ecole_id"] . "<br>";
echo "<strong>École Nom:</strong> " . $row["ecole_nom"] . "<br>";
echo "<strong>Nombre d'élèves:</strong> " . $row["nombre_eleves"] . "<br>";
echo "<strong>Nombre d'élèves pratiquant au moins un sport:</strong> " . $row["nombre_eleves_sportifs"] . "<br>";
echo "<strong>Nombre d'activités sportives pratiquées:</strong> " . $row["nombre_activites_sportives"] . "<br>";
if (count($result1) > 0) {
echo "<strong>Liste des activités sportives pratiquées classées par ordre croissant :</strong><br><br>";
echo "<strong>Liste des activités sportives pratiquées:</strong><br>";
//Affichage de la liste des activités sportives pratiquées
echo "<ul>";
foreach ($result1 as $row1) {
//print_r($row1);
if($row1["nombre_eleves_pratiquant"]>0 ){
echo "<li>" . $row1["sport_nom"] . " - Nombre d'élèves pratiquant: " . $row1["nombre_eleves_pratiquant"] . "</li>";
}
}
echo "</ul>";
// echo "<br>";
} else {
echo "Aucun résultat trouvé.";
}
echo "<br>";
voici le résultat à l'affichage :
École ID: 1
École Nom: Ecole_A
Nombre d'élèves: 10
Nombre d'élèves pratiquant au moins un sport: 8
Nombre d'activités sportives pratiquées: 5
Liste des activités sportives pratiquées classées par ordre croissant :
Liste des activités sportives pratiquées:
Natation - Nombre d'élèves pratiquant: 2
Cyclisme - Nombre d'élèves pratiquant: 2
Boxe - Nombre d'élèves pratiquant: 3
Football - Nombre d'élèves pratiquant: 3
Judo - Nombre d'élèves pratiquant: 7
Judo - Nombre d'élèves pratiquant: 4
Football - Nombre d'élèves pratiquant: 4
Boxe - Nombre d'élèves pratiquant: 8
Natation - Nombre d'élèves pratiquant: 8
Cyclisme - Nombre d'élèves pratiquant: 9
Boxe - Nombre d'élèves pratiquant: 2
Cyclisme - Nombre d'élèves pratiquant: 2
Football - Nombre d'élèves pratiquant: 3
École ID: 2
École Nom: Ecole_B
Nombre d'élèves: 15
Nombre d'élèves pratiquant au moins un sport: 14
Nombre d'activités sportives pratiquées: 5
Liste des activités sportives pratiquées classées par ordre croissant :
Liste des activités sportives pratiquées:
Natation - Nombre d'élèves pratiquant: 2
Cyclisme - Nombre d'élèves pratiquant: 2
Boxe - Nombre d'élèves pratiquant: 3
Football - Nombre d'élèves pratiquant: 3
Judo - Nombre d'élèves pratiquant: 7
Judo - Nombre d'élèves pratiquant: 4
Football - Nombre d'élèves pratiquant: 4
Boxe - Nombre d'élèves pratiquant: 8
Natation - Nombre d'élèves pratiquant: 8
Cyclisme - Nombre d'élèves pratiquant: 9
Boxe - Nombre d'élèves pratiquant: 2
Cyclisme - Nombre d'élèves pratiquant: 2
Football - Nombre d'élèves pratiquant: 3
École ID: 3
École Nom: Ecole_C
Nombre d'élèves: 4
Nombre d'élèves pratiquant au moins un sport: 4
Nombre d'activités sportives pratiquées: 3
Liste des activités sportives pratiquées classées par ordre croissant :
Liste des activités sportives pratiquées:
Natation - Nombre d'élèves pratiquant: 2
Cyclisme - Nombre d'élèves pratiquant: 2
Boxe - Nombre d'élèves pratiquant: 3
Football - Nombre d'élèves pratiquant: 3
Judo - Nombre d'élèves pratiquant: 7
Judo - Nombre d'élèves pratiquant: 4
Football - Nombre d'élèves pratiquant: 4
Boxe - Nombre d'élèves pratiquant: 8
Natation - Nombre d'élèves pratiquant: 8
Cyclisme - Nombre d'élèves pratiquant: 9
Boxe - Nombre d'élèves pratiquant: 2
Cyclisme - Nombre d'élèves pratiquant: 2
Football - Nombre d'élèves pratiquant: 3
en faite pour chaque école j'ai l'ensemble des activités pour toute les écoles.
je voudrai uniquement les sport pratiqué par école avec le nombre de pratiquant.
je ne sais pas comment faire pour récupérer uniquement les ligne que je veux pour chaque école
dans l'attente d'une réponse
merci d'avance