Requete multitables avec where et .... join ?

Résolu/Fermé
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - Modifié par maxireussite le 28/02/2015 à 02:30
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 - 1 mars 2015 à 02:48
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

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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
28 févr. 2015 à 04:09
Merci bcp, je vais vérifier cela.
0
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
28 févr. 2015 à 04:19
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
clé de 12 Messages postés 131 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 16 janvier 2024 1
28 févr. 2015 à 09:20
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
28 févr. 2015 à 13:13
OUi ville_id est commun au deux tables.

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

MErci bcp en tous cas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 28/02/2015 à 13:24
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
clé de 12 Messages postés 131 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 16 janvier 2024 1
Modifié par jordane45 le 1/03/2015 à 00:55
$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
clé de 12 Messages postés 131 Date d'inscription samedi 19 juin 2010 Statut Membre Dernière intervention 16 janvier 2024 1
28 févr. 2015 à 19:46
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
28 févr. 2015 à 20:04
Merc bcp, je prends le temps d'étudier cela.
0
jordane45 Messages postés 38139 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
Modifié par jordane45 le 1/03/2015 à 00:56
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 1/03/2015 à 02:36
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
maxireussite Messages postés 372 Date d'inscription jeudi 10 mai 2007 Statut Membre Dernière intervention 11 mars 2020 5
Modifié par maxireussite le 1/03/2015 à 02:49
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