Requete multitables avec where et .... join ?

Résolu
Bonjour tous,

J'ai grandement besoin d'aide sur une requete multitables.
Les champs de ma table mr_intervenants possedent du texte sauf pour le champ ville_id qui possède un id.

Dans une requête je dois afficher le tuple, mais avec la ville qui correspond à ville_id.
Comment compléter la requête suivante ?

"SELECT *
          FROM mr_intervenants
     WHERE intervenant_id = ".$intervenant_id ;


Merci d'avance.

9 réponses

  1. J'ai remplacé par :
    SELECT *
    FROM mr_intervenants 
    LEFT JOIN pt_villes ON mr_villes.ville_id  = mr_intervenants.ville_id 
    WHERE intervenant_id = 'intervenant_id ' ; 
    


    Là ça marche. Je sais, on peut faire mieux, mais là ça faisait 2 jours que j'étais dessus...

    MErci à tous
    1. Jordane45, tu m'excuseras mais j'ai recopié ton script tel quel (ou presque) et ça ne marche pas :

      "SELECT I.intervenant_id
                 ,I.nom
                ,I.prenom
                ,I.adresse
                ,I.ville_id
                ,V.ville
                ,V.cp
      FROM mr_intervenants I
      LEFT JOIN mr_villes V ON V.ville_id  = I.ville_id 
      WHERE intervenant_id = '$intervenant_id' ; 
      
      1. Modérateur
        Bonjour,

        Une simple jointure suffit ...
        par exemple :
        SELECT I.intervenant_id
                   ,I.nom
                  ,I.prenom
                  ,I.adresse
                  ,I.ville_id
                  ,V.ville
                  ,V.cp
        FROM mr_intervenants I
        LEFT JOIN mr_villes V ON V.ville_id  = I.ville_id 
        WHERE intervenant_id = '$intervenant_id' ; 
        
        


        Cordialement,
        Jordane
        1. JE résume

          Table1 mr_intervenants
          intervenant_id
          nom
          prenom
          adresse
          ville_id

          Table 2 mr_villes
          ville_id
          ville
          cp

          je souhaite faire une requête avec tous les champs de la table1
          mais que ville_id soit remplacé par le nom de la ville. Il faut que la ligne soit déterminée par intervenant_id. :
          Comment compléter ou modifier en ce sens la requête suivante
          "SELECT *
          FROM mr_intervenants
          WHERE intervenant_id = "$intervenant_id ;

          J'espère avoir été plus clair.

          Je vais donc tenté ta proposition Clé de 12. MErci.
          1. $req="select * from mr_villes where ville_id='$ville_id'";// 'je présume que $ville_id est connu :o)
            
            $val=mysql_query($req,$connexion);
            $ok= (mysql_num_rows,$val) <ital>/// là je décompose à fond)</ital>
            if ($ok=1){  //tu vérifies l'unicité de l'enregistrement; sinon cest pas la meme syntaxe
               $ville=mysql_fetch_row($val);
               $req2="select * from mr_intervenants where ville_id='$ville[0]'";
               $exec=mysql_query($req2,$connexion);
               $inter=mysql_fetch_row($exec);
               $ville=$ville[1]; ///la c'est le nom de la ville
               $cp=$ville[2]; ///la c'est le CP
               $nom=$inter[1]; ///bon, c est le nom
               $prenom=$inter[2]; //le prenom
               $adresse =$inter[3]; 
            }
            

            et tu as toutes tes données pour remplir tes <td>

            EDIT : Ajout des balises de code !
            Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
            Explications disponibles ici :
            https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
          2. Si tu as plusieurs intervenants par ville, il te faudra mettre un champ <option> pour sélectionner l'intervenant et afficher ses coordonnées...mais c'est une autre histoire
        2. OUi ville_id est commun au deux tables.

          Pour comprendre mon souhait, revoir le post du début.

          MErci bcp en tous cas.
          1. Bon, j'ai une double difficulté.

            Je souhaite que la ligne soit définie par "WHERE intervenant_id = ".$intervenant_id"

            Et que les deux tables soient liées par ville_id
            1. attention tu as un point devant $intervenant_id.
              ville_id est commun aux 2 table?
              tu veux extraire quoi de quelle table : table1 $val[champ X] et table2 $tab[champ y]
              car là, pour ce que tu demandes, tu n'as besoin que d'une seule table il me semble.
              pour ce que je comprends actuellement, ce aurais besoin de
              "select * from table1 where intervenant_id= '$intervant_id' and ville_id='$ville_id'";

              Ta selection multi-table ne sert que si tu lances une requête imbriquée style
              $req="select * from table2" (supposons que le champ ville_id est en 1ere colonne)
              $val=mysql_fetch_row($req,
              while($result=mysql_fetch_row($val))
              {
              $req2="select * from table1 where ville_id='$result[0]';
              tu lances ta connexion et tu peux alors exploiter les champs table1 et table2
              et tu boucles
              }
              voila en gros ta requête détaillée si c'est ce que tu veux
              Sinon exprime toi :o)
          2. Salut,
            euh tuple = jeu d'enregistrements?

            en SQL on peut utiliser des sus requêtes, donc on va faire une sous requête sur la table qui sert à avoir l'id commune(clé étrangère):

            SELECT * FROM autre_table WHERE ville_id="clause";

            Puis nous utiliserons ce résultat comme clause pour la requête finale:

            SELECT * FROM mr_intervenants
            WHERE (SELECT * FROM autre_table WHERE ville_id="clause");

            On peut aussi utiliser les alias SQL.

            Des exemples ici:

            http://sqlpro.developpez.com/cours/sqlaz/sousrequetes/