Requète sql

Bonjour à tous,

J'ai un big prob. En faire j'ai deux tables reliées entre elles par "id" .
La 1ère table s'appelle Matières dans une matière il y a plusieurs matières.
id Matières
1 mathématique
2 informatique
3 histoire

La 2ème table s'appelle cour dans une matière je peux avoir plusieurs cours.

id Cour
1 probabilité
1 équation du 2nd degré
2 Base de donnée
2 Java
3 L'esclavage

Je dois 'associé un cour à chaque matière par exemple mathématique(matière)=probabilité(cour).

En faite je cherche une requète sql pour associé cette requète à mon programme php afin d'insérer des cours dans chaque matière.

J'espère avoir bienb expliqué.

Merci j'attend de vos news!!!
Configuration: Windows Vista
Internet Explorer 7.0

38 réponses

Résumé de la discussion

Deux tables, Matières et Cours, doivent être reliées par une clé étrangère afin d’associer chaque cours à une matière et d’insérer ces données depuis un formulaire PHP. Plusieurs propositions préconisent de créer id_matiere dans Matières et d’ajouter id_mat dans Cours comme clé étrangère, puis de définir FOREIGN KEY(id_mat) REFERENCES Matières(id_matiere) pour lier les deux tables. Des exemples d’insertion montrent d’utiliser INSERT INTO cours(nom_cours, id_mat) VALUES ('probabilite', 1) et de corriger les noms de colonnes ou les fautes de frappe dans le formulaire PHP. En cas d’erreurs PHP, les messages d’erreur comme errno 150 sur les clés étrangères apparaissent et exigent une correspondance exacte des types et des noms de colonnes.

Bobot (l’IA à votre service)
  1. En mysql,ca donne

    Select Matières,Cour
    From cour c,Matières M
    where M.id = c.id;

    MAis ceci dit donne d'autres nom a tes tables car ca reste ambigüe de donner un nom de table et le même nom pour un de ses attributs.
    JE sais pas si le Sql ressemble fort au Mysql mais la base est bonne, il suffit d'ajuster le langage.
    1. ok merci de ta réponse rapide lxav, mais moi je veux pas selectionner je veux juste insérer un cour dans la matière.
      1. Bonsoir,

        Il te faut rajouter un champ dans la table cours appelé id_mat fessant référence à id de matière. Cela te permet d'avoir la référence de la matière dans la table cour ce qui te permet de liés les deux tables comme tu le montres dans ton exemple.

        Tu dois ensuite définir le champ id_mat comme clé étrangère dans la table :
        Alter table cour
        Foreign key fk_id_mat_c (id_mat) REFERENCES matiere(id);

        Lors de la requête d'insertion :
        INSERT INTO cour(id,cour,id_mat) VALUES ('1', 'probabilite', '1')

        En espèrant avoir répondu à ta question,

        Thamior.
        1. ok thamior, j'ai déja essayé ta solution.
          Mais moi en faite ma requète je dois l'intégré a un programme en php.
          Je m'explique: Par un petit formulaire l'ulilisateur choisi premièrement sa matière et ensuite il insert le cour qu'il souhaite associé à sa matière. En faite je cherche un petit programme avec uen requète ou dès que l'utilisteur entre le cour et click sur valider, elle insère le cour automatiquement dans la table cour. Et l'id cour doit ètre associé a l'id matière pour que quand l'utilisateur veux affiché les cours qui se trouve dans une matières elle va le chercher.
          1. Je te propose un petit script en prenant en compte ce que je t'ai mit dans ma précédante réponse :

            Je te conseil de mettre les champs id en auto_increment si ce n'est pas déjà fait.

            Ensuite, tu créais un menu déroulant :

            <?php
            if($page == null)
            {
            <form action="index.php?page=ajout_cours" method="post">
            <select name="matiere">
            <?php
            $sql = "select * from matiere";
            $exe = mysql_query($sql); // tu executes la requete
            $rt = mysql_fetch_assoc($rt);

            if($rt)
            {
            ?>
            <option value="<?php echo $rt["id"]; ?>"><?php echo $rt["materie"]; ?></option>
            <?php
            }
            ?>
            </select>
            <input type="text" name="cours" />
            <input type="submit" value="Envoyer" />
            }

            if($apge == "ajout_cours")
            {
            if($_POST["materiere] != null && $_POST["cours"] != null)
            {
            $cours = $_POST["cours"];
            $id_mat = $_POST["materiere];
            $sql = "INSERT INTO cour(cour,id_mat) VALUES (, '$cours', '$id_matiere')"
            $exe = mysql_query($sql); // tu executes la requete

            if($exe)
            {
            echo "La requete a bien été ajouté";
            }
            else
            {
            echo "La requete a mal été executé !";
            }
            }
            }
            ?>

            En espérant que ça t'aide.

            Thamior.
            1. excuse thamior, je m'embrouille dans mes propres données que je t'est fourni.
              On va reprendre car le nom de ma table est pareil que mon attribu sa ml'embrouille.
              Si j'ai

              Ma 1ère table va s'appellé table1
              id et Matière comme précédemment.
              Ma 2ème table s'appelle table2
              id et cour comme précédemment

              est ce que tu peux me redonné ton script avec les nouvelles données.
              Je me demande comment tu as pu t'y retrouvé dans ceci.

              Merci
              1. Bonjour,

                Tu es obligé de mettre un champ fessant référence à la matière dans cours.

                Je te propose donc :
                CREATE TABLE matiere
                (
                id_matiere int(5) not null auto_increment,
                nom_matiere varchar(60) not null,
                Primary Key(id_matiere)
                )

                CREATE TABLE cours
                (
                id_cours int(10) not null auto_increment,
                nom_cours varchar(120) not null,
                id_mat int(5) not null
                Primary Key (id_cours),
                Foreign Key (id_mat) REFERENCES matiere(id_matiere)
                )

                Je ne vois pas d'autres solutions pour liés car une matière a un ou plusieurs cours et un cours dépend d'une et une seule matière si j'ai bien compris.

                Mon script avec les modifications :

                <?php
                if($page == null)
                {
                <form action="index.php?page=ajout_cours" method="post">
                <select name="matiere">
                <?php
                $sql = "select * from matiere";
                $exe = mysql_query($sql); // tu executes la requete
                $rt = mysql_fetch_assoc($rt);

                if($rt)
                {
                ?>
                <option value="<?php echo $rt["id_matiere"]; ?>"><?php echo $rt["nom_materie"]; ?></option>
                <?php
                }
                ?>
                </select>
                <input type="text" name="cours" />
                <input type="submit" value="Envoyer" />
                }

                if($page == "ajout_cours")
                {
                if($_POST["materiere] != null && $_POST["cours"] != null)
                {
                $cours = $_POST["cours"];
                $id_mat = $_POST["materiere];
                $sql = "INSERT INTO cours(_nom_cour,id_mat) VALUES ('$cours', '$id_matiere')"
                $exe = mysql_query($sql); // tu executes la requete

                if($exe)
                {
                echo "La requete a bien été ajouté";
                }
                else
                {
                echo "La requete a mal été executé !";
                }
                }
                }
                ?>

                Je pense qu'avec ça tu devrais t'en sortir ;).

                Thamior.
                1. Merci thamior de ton aide,
                  mais quand je crée la table cour je rentre la requète avec phpmyadmin sa m'affiche une erreur:

                  #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(id_cours),
                  Foreign Key (id_mat) REFERENCES matiere(id_matiere)
                  )' at line 6

                  Pourquoi sa me met ceci selon toi???
                  1. Petit correctif :

                    CREATE TABLE cours
                    (
                    id_cours int(10) not null auto_increment,
                    nom_cours varchar(120) not null,
                    id_mat int(5) not null,
                    Primary Key (id_cours),
                    FOREIGN KEY(id_mat) REFERENCES matiere(id_matiere)
                    )

                    J'ai oublié une virgule sur la ligne id_mat int(5) not null.

                    Je viens de tester les requêtes et ça marche impec.

                    Thamior.
                    1. Quand je test le programme que tu m'a donné que je trouve finalement assez simple sa me di:
                      Parse error: syntax error, unexpected '<' in C:\wamp\www\admin2\items_actions.php on line 4
                      Pourquoi sa me met sa???

                      Et a quek moment je dois faire appelle a ma base de donné dont ton programme????
                      1. Correctif :

                        <?php
                        if($page == null)
                        {
                        ?>
                        <form action="index.php?page=ajout_cours" method="post">
                        <select name="matiere">
                        <?php
                        $sql = "select * from matiere";
                        $exe = mysql_query($sql); // tu executes la requete
                        $rt = mysql_fetch_assoc($rt);

                        if($rt)
                        {
                        ?>
                        <option value="<?php echo $rt["id_matiere"]; ?>"><?php echo $rt["nom_materie"]; ?></option>
                        <?php
                        }
                        ?>
                        </select>
                        <input type="text" name="cours" />
                        <input type="submit" value="Envoyer" />
                        }

                        if($page == "ajout_cours")
                        {
                        if($_POST["materiere] != null && $_POST["cours"] != null)
                        {
                        $cours = $_POST["cours"];
                        $id_mat = $_POST["materiere];
                        $sql = "INSERT INTO cours(_nom_cour,id_mat) VALUES ('$cours', '$id_matiere')"
                        $exe = mysql_query($sql); // tu executes la requete

                        if($exe)
                        {
                        echo "La requete a bien été ajouté";
                        }
                        else
                        {
                        echo "La requete a mal été executé !";
                        }
                        }
                        }
                        ?>
                        1. Mainteant sa m'affiche:
                          Parse error: syntax error, unexpected $end in C:\wamp\www\admin2\items_actions.php on line 45
                          1. Tu peux me copier le code de ta page. Sur le code que je t'ai passé je ne compte que 43 lignes ^^.

                            Thamior.
                            1. Tu peux me copier le code de ta page. Sur le code que je t'ai passé je ne compte que 43 lignes ^^.

                              Thamior.
                              1. Le code que je t'ai passé n'a que 43 lignes...

                                Peux tu me montrer le code que tu as utilisés ?

                                La comme ça, je ne vois pas ou ce trouve l'erreur.

                                Thamior.
                                1. Voici mon code:
                                  <?php
                                  if($page == null)
                                  {
                                  ?>
                                  <form action="index.php?page=ajout_cours" method="post">
                                  <select name="matiere">
                                  <?php
                                  $sql = "select * from matiere";
                                  $exe = mysql_query($sql); // tu executes la requete
                                  $rt = mysql_fetch_assoc($rt);

                                  if($rt)
                                  {
                                  ?>
                                  <option value="<?php echo $rt["id_matiere"]; ?>"><?php echo $rt["nom_materie"]; ?></option>
                                  <?php
                                  }
                                  ?>
                                  </select>
                                  <input type="text" name="cours" />
                                  <input type="submit" value="Envoyer" />
                                  }

                                  if($page == "ajout_cours")
                                  {
                                  if($_POST["materiere] != null && $_POST["cours"] != null)
                                  {
                                  $cours = $_POST["cours"];
                                  $id_mat = $_POST["materiere];
                                  $sql = "INSERT INTO cours(_nom_cour,id_mat) VALUES ('$cours', '$id_matiere')"
                                  $exe = mysql_query($sql); // tu executes la requete

                                  if($exe)
                                  {
                                  echo "La requete a bien été ajouté";
                                  }
                                  else
                                  {
                                  echo "La requete a mal été executé !";
                                  }
                                  }
                                  }
                                  ?>
                                  1. Merci lxav

                                    J'ai rajouté la virgule qu'il manquait à $sql = "INSERT INTO cours(_nom_cour,id_mat) VALUES ('$cours', '$id_matiere')"
                                    mais sa m'affiche tjs le mème message
                                    • 1
                                    • 2