Partage
  • Partager sur Facebook
  • Partager sur Twitter

Structure d'une BDD sql

Base élève & Base Cours

Sujet résolu
    11 août 2010 à 22:45:04

    Bonsoir,

    Je suis responsable de la formation de jeunes dans un centre de formation.

    Je suis en train de développer une application qui permettrait aux formateurs d'enregistrer chaques jours les cours qui on étés dispensés à chaques élèves.

    Nous avons déjà une table (membres) avec tous les renseignements administratifs.
    Je pensais créer une seconde table avec la liste de tous les cours de notre formation.

    Mais je ne vois pas bien comment relier l'un à l'autre individuellement.

    Au niveau structure de la base de données je ne vois pas du tout.

    Si quelqu'un aurait une piste pour m'éclairer ça serait sympa.

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      11 août 2010 à 23:41:28

      Bonjour,

      Je suppose que dans la table membres, chaque membre possède un ID unique ?

      Tu pourrais créer une table "cours" qui aurait 2 champs :
      - id (clé primaire en auto-incrémentation)
      - cours (varchar).

      Et une autre table "eleves_cours" (par exemple) qui relierait les cours vu par les membres :
      - id (comme d'hab)
      - id_membre (clé étrangère faisant référence à l'id de la table membre)
      - id_cours (clé étrangère faisant référence à l'id de du cours suivi dans la table cours)
      - date (date à laquelle le cours a été suivi).

      Tu pourras ensuite faire une requête (avec jointure) pour savoir qui a suivi quel cours et à quelle date.
      • Partager sur Facebook
      • Partager sur Twitter
        12 août 2010 à 17:12:45

        Bonjour BlueRat,

        Si j'ai bien compris ton idée, la table eleves_cours aurait par exemple :

        ID : 1
        ID_MEMBRE : 4
        ID_COURS : 2

        Donc le membre dont l'ID est 4 à vu le cours dont l'ID est 2.

        Donc cela implique 25 élèves X 60 cours = 1500 entrées ?

        Je vais commencer à créer ça mais je vais sans doute avoir besoin d'aide pour la Jonction parce que là....

        Tu aurais un exemple de jonction qui me permettrait de comprendre et de l'adapter par la suite ?

        Merci
        • Partager sur Facebook
        • Partager sur Twitter
          12 août 2010 à 17:34:23

          L'insertion ne devrait pas poser de soucis.
          Un simple formulaire, qui a suivi tel cours, et hop.
          Je dirai que ça prendrait 5 à 10 minutes maximum par jour.

          Imaginons que tu veuilles voir quel cours ont suivis tes élèves durant la journée de hier :
          SELECT m.nom, m.prenom, c.cours FROM membres m
          JOIN eleves_cours e ON e.id_membre = m.id -- ici on joint l'id du membre de la table eleves_cours avec l'id du membre de la tables membres
          JOIN cours c ON c.id = e.id_cours -- idem avec l'id du cours
          WHERE e.date = DATE('2010-08-11')
          


          Tu récupères ainsi le nom, prénom des élèves ainsi que l'intitulé du cours ayant suivis un cours durant la journée d'hier.
          Tu as ensuite des fonctions MySQL (en considérant que c'est ce type de base de données que tu utilises) pour gérer facilement les dates (pour sélectionner le mois en cours, l'année, etc.)
          • Partager sur Facebook
          • Partager sur Twitter
            12 août 2010 à 17:46:27

            Heu ^^ je vais sembler débuter mais je ne saisis pas trop certaines choses :

            SELECT m.nom, m.prenom, c.cours FROM membres m
            JOIN eleves_cours e ON e.id_membre = m.id
            JOIN cours c ON c.id = e.id_cours
            WHERE e.date = DATE('2010-08-11')

            Tout ce qui est en rouge je vois pas trop de quoi il s'agit.

            J'ai une table "membres" avec id, nom, prenom, etc...
            J'ai une table "Cours" avec id, titre, type, niveau etc...

            Ca doit être super simple à mon avis mais j'ai du passé à côté d'un truc :D
            • Partager sur Facebook
            • Partager sur Twitter
              12 août 2010 à 19:23:47

              SELECT FROM table t

              t est un alias pour table (ça use moins les doigts).

              > Ca doit être super simple à mon avis

              oui, ça l'était XDDD
              • Partager sur Facebook
              • Partager sur Twitter
                12 août 2010 à 19:27:35

                D'accord ^^

                FROM membres m
                JOIN eleves_cours e
                JOIN cours c

                On déclare l'alias, et ensuite on peux l'utiliser ?

                J'vais voir si j'trouve un tuto là dessus :)

                Merci à vous deux

                ----

                Maj : Tuto trouvé :)
                Merci encore à vous deux.
                • Partager sur Facebook
                • Partager sur Twitter
                  14 septembre 2010 à 22:04:24

                  Bonsoir,

                  Je viens de terminer le script qui me permet de mettre à jour les cours en fonction des élèves.

                  <?php
                  if (isset($_GET['id'])) {
                  
                  include('include/cnx_mysql.php');
                  $requete = $bdd->prepare('SELECT * FROM liste_cours WHERE id = ? ');
                  $requete->execute(array($_GET['id'])) or die(print_r($requete->errorInfo()));
                  $data = $requete->fetch();
                  $requete->closeCursor();
                  
                  ?>
                  <h2>Modifier un cours</h2>
                  
                  <p><span class="gras">Nom :</span> <?php echo $data['nom']; ?></p>
                  
                  <br />
                  
                  <p><span class="gras">Référence : </span><?php echo $data['reference']; ?>
                  
                  &#160;&#160;
                  
                  <span class="gras">Unité de Valeur : </span><?php echo $data['uv']; ?>
                  
                  </p>
                  
                  
                  
                  <form method="post" id="modif-cours" action="<?php echo $_SERVER['REQUEST_URI'];?>">
                  <p>
                  
                  <table class="liste_com">
                  	<tr>
                  		<td class="titre_liste_com">Nom</td>
                  		<td class="titre_liste_com">Prénom</td>
                  		<td class="titre_liste_com">Date</td>
                  		<td class="titre_liste_com">Formateur</td>
                  	</tr>
                  <?php
                  include('include/cnx_mysql.php');
                  $requete = $bdd->prepare('
                  SELECT u.id, u.login, u.nom, u.prenom, c.date_cours, c.formateur FROM user u 
                  JOIN cours_jsp c ON u.id = c.id_user 
                  JOIN liste_cours l ON l.id = :id
                  WHERE u.type_de_compte IN("jsp1", "jsp2", "jsp3", "jsp4") AND l.id = :id');
                  $requete->execute(array('id' => $_GET['id'])) or die(print_r($requete->errorInfo()));
                  while ($data = $requete->fetch()) {
                  
                  
                  
                   ?>
                  
                  	<tr>
                  		<td class="liste_com"><input type="hidden" name="id[]" value="<?php echo $data['id']; ?>" /><?php echo htmlentities($data['nom']);?></td>
                  		<td class="liste_com"><?php echo htmlentities($data['prenom']);?></td>
                  		<td class="liste_com"><input type="text" name="date_cours[]" size="15" maxlength="15" /></td>
                  		<td class="liste_com"><input type="text" name="formateur[]" size="30" maxlength="100" /></td>
                  	</tr>
                  
                  <?php 
                  } $requete->closeCursor();
                  ?>
                  </table>
                  
                  
                  
                  
                  
                  
                  <br /><br />
                  <input class="send" type="submit" value="Enregistrer" /><br />
                  </p>
                  </form>
                  ?>
                  


                  Le problème c'est que la page m'affiche la liste des élèves mais autant de fois qu'il y a de cours dans le programme (113).

                  Je voudrais afficher la liste des élèves une seule fois en fonction du cours choisis (GET['id']) et non des 113.

                  Merci d'avance
                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 septembre 2010 à 23:19:42

                    SELECT u.id, u.login, u.nom, u.prenom, c.date_cours, c.formateur 
                    FROM user u 
                    INNER JOIN cours_jsp c ON u.id = c.id_user 
                    INNER JOIN liste_cours l ON l.id = c.id
                    WHERE u.type_de_compte IN("jsp1", "jsp2", "jsp3", "jsp4") AND l.id = :id
                    

                    --> la condition de la deuxième jointure n'étais pas bonne (elle ne restreignais rien)

                    Bien sur je part du principe que les tables sont respectivement les mêmes que dans les posts précédents... ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      14 septembre 2010 à 23:59:39

                      Hum effectivement il y a du changement, je n'ai que le premier membre pour le premier cours. Il me manque les 24 autres élèves :)

                      Je sens que je vais jamais y arriver avec ces jointures...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 septembre 2010 à 18:00:29

                        Il te suffit juste d'adapter le code donné par BlueRat à ton exemple.
                        Déjà, indique précisément la structure de tes tables, histoire de bien savoir laquelle sert à quoi ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 septembre 2010 à 21:14:58

                          Bonjour,

                          Alors voici mes tables :

                          La première "user" :
                          Image utilisateur

                          Ensuite "liste_cours" :
                          Image utilisateur

                          Et enfin "cours_jsp" :
                          Image utilisateur
                          • Partager sur Facebook
                          • Partager sur Twitter
                            15 septembre 2010 à 21:20:44

                            Ok ;)
                            SELECT u.id, u.login, u.nom, u.prenom, c.date_cours, c.formateur 
                            FROM user u 
                            INNER JOIN cours_jsp c ON u.id = c.id_user 
                            INNER JOIN liste_cours l ON l.id = c.id_cours
                            WHERE u.type_de_compte IN("jsp1", "jsp2", "jsp3", "jsp4") AND l.id = :id
                            

                            Cette requête devrait marcher. C'était la condition du 2ème JOIN qui n'était pas bonne, désolé de l'étourderie ;)
                            • Partager sur Facebook
                            • Partager sur Twitter
                              15 septembre 2010 à 21:25:44

                              Effectivement cela fonctionne merci beaucoup :)

                              C'est le INNER qui change tout ? Je l'avais pas mis avant :/

                              Merci encore.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                15 septembre 2010 à 21:27:34

                                Non, le inner est implicite en fait, tu peux le mettre ou non, moi je préfère le mettre pour être clair, mais tu fais comme tu veux ^^

                                C'était la condition du 2ème join : ON l.id = c.id_cours au lieu de ON l.id = c.id
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  15 septembre 2010 à 21:30:53

                                  Ha oui j'avais même pas vu moi non plus :D

                                  Et là de suite je comprend mieux la jonction. :p

                                  Je vais devoir faire la même chose pour les notes des élèves et avec cet exemple là , je devrais y arriver :)

                                  Merci encore pour ton aide.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    15 septembre 2010 à 21:31:54

                                    De rien, et si t'as encore besoin hésite pas ;)
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Structure d'une BDD sql

                                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                    • Editeur
                                    • Markdown