Requete multitables avec where et .... join ?

Résolu
maxireussite Messages postés 405 Statut Membre -  
maxireussite Messages postés 405 Statut Membre -
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. ngolo
     
    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/
    0
  2. maxireussite Messages postés 405 Statut Membre 5
     
    Merci bcp, je vais vérifier cela.
    0
  3. maxireussite Messages postés 405 Statut Membre 5
     
    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
    0
    1. clé de 12 Messages postés 141 Date d'inscription   Statut Membre Dernière intervention   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)
      0
  4. maxireussite Messages postés 405 Statut Membre 5
     
    OUi ville_id est commun au deux tables.

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

    MErci bcp en tous cas.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. maxireussite Messages postés 405 Statut Membre 5
     
    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.
    0
    1. clé de 12 Messages postés 141 Date d'inscription   Statut Membre Dernière intervention   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
      0
    2. clé de 12 Messages postés 141 Date d'inscription   Statut Membre Dernière intervention   1
       
      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
      0
  7. maxireussite Messages postés 405 Statut Membre 5
     
    Merc bcp, je prends le temps d'étudier cela.
    0
  8. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 831
     
    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
    0
  9. maxireussite Messages postés 405 Statut Membre 5
     
    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' ; 
    
    0
  10. maxireussite Messages postés 405 Statut Membre 5
     
    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
    0