À l'école de musique

[30 min]

Une école de musique souhaite gérer les inscriptions aux différentes classes d'instrument et aux orchestres à l'aide d'une base de données.

Schéma conceptuel
CTRL+C pour copier, CTRL+V pour coller
1
Famille (#nom:chaîne)
2
Instrument (#lib:chaîne, lib_long:chaîne, famille=>Famille(nom))
3
Professeur (#num:entier, nom:chaîne, prénom:chaîne, tâche:chaîne)
4
Eleve (#num:entier, nom:chaîne, prénom:chaîne, date_naissance:date, inst=>Instrument(lib))
5
Orchestre (#lib:chaîne, min:entier, max:entier)
6
Enseigne (#num=>Professeur(num), #lib=>Instrument(lib))
7
Participe (#num=>Eleve(num), #lib=>Orchestre(lib))
Famille (#nom:chaîne)
Instrument (#lib:chaîne, lib_long:chaîne, famille=>Famille(nom))
Professeur (#num:entier, nom:chaîne, prénom:chaîne, tâche:chaîne)
Eleve (#num:entier, nom:chaîne, prénom:chaîne, date_naissance:date, inst=>Instrument(lib))
Orchestre (#lib:chaîne, min:entier, max:entier)
Enseigne (#num=>Professeur(num), #lib=>Instrument(lib))
Participe (#num=>Eleve(num), #lib=>Orchestre(lib))

Question

Créer la base de données permettant de gérer les élèves et les instruments (sans les familles). Insérer des données exemple.

Question

Écrire le code SQL qui permet d'afficher la liste des élèves (nom et prénom) triés par instrument.

Question

Écrire le code SQL qui permet d'afficher la liste des instruments avec le nombre d'élèves associés (on affichera même les instruments dont personne ne joue).

Question

Écrire le code SQL qui permet d'afficher la liste des instruments avec le nombre de places restantes par instruments, sachant qu'il y a 20 places disponibles par instrument.

Question

Compléter le code PHP ci-dessous pour afficher le nombre de places disponibles par instruments listés par leur libellé long.

On utilisera une requête paramétrée.

CTRL+C pour copier, CTRL+V pour coller
1
<html xmlns="http://www.w3.org/1999/xhtml">
2
	<head>
3
		<title>École de musique</title>
4
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
	</head>
6
	
7
	<body>
8
	<h2>Liste des places disponibles par instrument</h2>
9
	<table border="1">
10
	<tr> <td><b>Instruments</b></td> <td><b>Places disponibles</b></td> </tr>
11
	
12
	<?php
13
	/* Nombre maximum d'élèves autorisé par instrument */
14
    $max_eleves = 20; 
15
    
16
    /* Nombre maximum d'élèves autorisé par instrument */
17
    $connexion = new PDO('pgsql:host=localhost;port=5432;dbname=musique', 'me', 'mypassword');	
18
    
19
    /** Préparation et exécution de la requête **/
20
    $sql = "SELECT I.lib AS lib, ? - COUNT(E.inst) AS dispo ...";
21
    $resultset = $connexion->prepare($sql);
22
    $resultset->bindParam(1, ...);
23
    $resultset->execute();            
24
        
25
    while ($row = $resultset->fetch(PDO::FETCH_ASSOC)) {
26
        echo "<tr>";
27
        echo "<td>" . $row[...] . "</td>";
28
        echo "<td>" . $row[...] . "</td>";
29
        echo "</tr>";
30
        }
31
        
32
    /** Déconnexion **/
33
    $connexion=null;    
34
    ?>
35
    
36
    </table>
37
    </body>
38
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>
		<title>École de musique</title>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	</head>
	
	<body>
	<h2>Liste des places disponibles par instrument</h2>
	<table border="1">
	<tr> <td><b>Instruments</b></td> <td><b>Places disponibles</b></td> </tr>
	
	<?php
	/* Nombre maximum d'élèves autorisé par instrument */
    $max_eleves = 20; 
    
    /* Nombre maximum d'élèves autorisé par instrument */
    $connexion = new PDO('pgsql:host=localhost;port=5432;dbname=musique', 'me', 'mypassword');	
    
    /** Préparation et exécution de la requête **/
    $sql = "SELECT I.lib AS lib, ? - COUNT(E.inst) AS dispo ...";
    $resultset = $connexion->prepare($sql);
    $resultset->bindParam(1, ...);
    $resultset->execute();            
        
    while ($row = $resultset->fetch(PDO::FETCH_ASSOC)) {
        echo "<tr>";
        echo "<td>" . $row[...] . "</td>";
        echo "<td>" . $row[...] . "</td>";
        echo "</tr>";
        }
        
    /** Déconnexion **/
    $connexion=null;    
    ?>
    
    </table>
    </body>
</html>