[Réglé] [SQL] Une jointure avec le résultat de la requete

Une jointure avec le résultat de la requete [Réglé] [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 16-07-2014 à 15:29:56    

Bonjour,
 
Voici ma question
 
J'ai 2 tables : membre et departement
 
Je veux afficher le nom du département a côté du pseudo du membre.
 
La table membre contient :  id | pseudo | code_postal
 
La table département contient : id | departement_code (les 2 numeros de département) | departement (nom du département)
 

Citation :

$sql = 'SELECT * FROM membre  WHERE actif = 1 ORDER BY id ';
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
while($data = mysql_fetch_array($req))
{
$code_postal = $data['code_postal'];
$pseudo = $data['pseudo'];
$numero_departement = substr($code_postal, 0, 2);
 
$sql2 = 'SELECT * FROM departement WHERE departement_code = "'.$numero_departement.'" ';
 
 $req2 = mysql_query($sql2) or die('Erreur SQL !<br>'.$sql2.'<br>'.mysql_error());
while($data2 = mysql_fetch_array($req2))
{
$nom_departement = $data2['departement'];
 }
   
   
echo "$pseudo - $nom_departement";
 
}


 
 
 
J'aimerai faire une jointure mais... le numéro de département du membre est dans le résultat de la premiere requête !
 
Auriez vous quelques pistes ?
 
Merci :)


Message édité par tomware le 03-01-2015 à 20:29:11
Reply

Marsh Posté le 16-07-2014 à 15:29:56   

Reply

Marsh Posté le 16-07-2014 à 15:44:20    

Tout simplement:

SELECT *  
FROM membre m
JOIN departement d ON d.departement_code = SUBSTR(m.code_postal, 0, 2)
WHERE m.actif = 1  
ORDER BY m.id


Evidemment il faut remplacer SUBSTR(m.code_postal, 0, 2) par la fonction substring qui va bien selon ton SGBD, donc potentiellement le nom et les parametres ne seront pas les memes. Celui propose devrait marcher sous Oracle si je ne m'abuse (meme si les puristes utiliseraient SUBSTR(m.code_postal, 1, 2) pour le meme resultat).


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 16-07-2014 à 15:51:02    

Normalement, dans la table membre, tu devrais avoir en clé étrangère l'id du département. Du coup, tu fais tout un une seule requête sql.
 
Edit : qu'est-ce que tu entends par "les 2 numeros de département" :??: A ma connaissance, un département n'a qu'un seul n°, non ?


Message édité par rufo le 16-07-2014 à 15:52:35

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-07-2014 à 16:08:59    

Il veut surement dire les deux chiffres: 34 Herault, 69 Rhone... 2B Haute-Corse  [:ultra2:2]


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 17-07-2014 à 09:47:29    

Ben y'a déjà un champ "departement" contenant le nom du département :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-07-2014 à 14:17:47    

ruffo :), pas très réveillé , ce matin lol
tom veut le nom du département à coté du pseudo du membre ...
 
Attention les codes postes corses sont en 20000
Lasnoufle, ta jointure ne va pas marcher pour ceux-ci ...
 
Tom : Il te faut gérer ce cas dans la requête proposée par Lasnoufle :)
 
Guillaume


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 17-07-2014 à 14:21:56    

un bon décode des famille pour la corse
20100, 20300, 20500, 20700 et 20900 sont pour 2A et le reste pour 2B. c'est un peu chiant mais c'est faisable

Reply

Marsh Posté le 17-07-2014 à 14:24:48    

gpl73 a écrit :

ruffo :), pas très réveillé , ce matin lol
tom veut le nom du département à coté du pseudo du membre ...
 
Attention les codes postes corses sont en 20000
Lasnoufle, ta jointure ne va pas marcher pour ceux-ci ...
 
Tom : Il te faut gérer ce cas dans la requête proposée par Lasnoufle :)
 
Guillaume


Je parle de la définition de ta table "departement". Il met ceci :
"La table département contient : id | departement_code (les 2 numeros de département) | departement (nom du département)"
 
J'étais intrigué par ce qu'il entendait par "les 2 numeros de département" pour le champ "departement_code" (un département n'a quu'n seul n° à ma connaissance). Pour sa requête, j'avais bien compris ce qu'il voulait, d'où pourquoi je parlais de faire une jointure, quitte à modifier sa table membre pour y ajouter la clé étrangère id du département, ce qui serait plus propre que de faire des substr :/
 
Edit : et ma solution éviterait de se prendre la tête avec la Corse puisqu'on se base sur l'id et pas le code du département pour faire la jointure...


Message édité par rufo le 17-07-2014 à 14:26:28

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 17-07-2014 à 16:19:57    

Ruffo, tu as raison... c'est le plus "propre".
 
Tom, si tu as ajoutes une colonne numéro du département,  
pendant que tu y es, penses à gérer les régions, les pays... car tu auras tôt ou tard un utilisateur qui va vouloir faire des regroupements là dessus (par exemple)...
 
Guillaume


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 03-01-2015 à 20:28:56    

Bonjour,
 
Je ne vous avais pas remercié alors je me rattrapes, merci pour vos réponses ca m'a bien aidé :jap:  
 
ps : oui je parlais bien des 2 chiffres de département 75 paris.  ;)  
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed