liste générée a partir de champs contenus dans 2 tables

liste générée a partir de champs contenus dans 2 tables - SQL/NoSQL - Programmation

Marsh Posté le 25-07-2005 à 16:40:19    

Bonjour,  
 
Voici mon probleme: je dois générer une liste d'ingénieur dans un fichier Excel.  
Cette liste contient des données issues de 2 (voir 3) tables différentes:
 

Code :
  1. table formulaire_bd
  2. table formulaire_gap
  3. table formulaire_rrh


 
 
J'arrive a generer ce fichier excel, mais les données sont melangées; je m'explique:
 
Je veux récupérer:  
"nom", "prenom" et "codeing" dans la table fomulaire_bd.
"date_entree" dans la table formulaire_gap
 
 
Il faut savoir qu'un ingénieur a un codeing unique.
les premières données saisies sont celles du formulaire_bd, puis le formulaire_gap est alors rempli.
Cependant, les données d'un ingénieur n'ont as nécessairement été saisies dans le formulaire_gap. --> mais il faut cependant que je puisse inclure dans la liste les ingnieurs dont le formulaire_gap n'a pas encore été saisi.
Ainsi, je veux pouvoir générer une liste de tous les ingénieurs contenus dans ces 2 tables (qui ont toutes 2 le champ "codeing" propre à 1 seul ingénieur).
 
J'espère avoir été suffisemment clair...
 
Voici le tableau que j'obtiens:
les 5 1eres lignes sont correcte, elles correspondent à la requete "req", les dates ne sont pas melangées.
Les lignes suivantes quant à elles, recuperent les infos des requete "req2" et "req3", et là c le bordel.. tout se melange...
 

Code :
  1. BD NOM PRENOM DATE D'ENTREE
  2. OMEGA   DURAND Alfred 2005-05-28
  3. OMEGA   LAVALLE Philippe 0000-00-00
  4. OMEGA   BIDEUL Truc 2005-07-15
  5. OMEGA   COSATI Sophie 2002-06-20
  6. OMEGA   DUPONT Jean-paul 2002-05-20
  7. OMEGA     0000-00-00
  8. OMEGA   DUPONT Jean-paul 2002-09-20
  9. OMEGA   DURAND Alfred 2002-09-20
  10. OMEGA   BIDEUL Truc 2002-09-20
  11. OMEGA   LAVALLE Philippe 2002-09-20
  12. OMEGA   COSATI Sophie 2002-09-20
  13. OMEGA   MARSO Marc 2002-09-20
  14. OMEGA   111 111 2002-09-20
  15. OMEGA   777 777 2002-09-20
  16. OMEGA   888 888 2002-09-20
  17. OMEGA   999 999 2002-09-20
  18. OMEGA   34 545 2002-09-20
  19. OMEGA   5454 54654 2002-09-20
  20. OMEGA     2002-09-20
  21. OMEGA   55 656 2002-09-20
  22. OMEGA   465 456 2002-09-20
  23. OMEGA   1 1 2002-09-20
  24. OMEGA   456 123 2002-09-20
  25. OMEGA   132 132 2002-09-20
  26. OMEGA   toto 301 2002-09-20
  27. OMEGA   258 258 2002-09-20
  28. OMEGA   7788 7788 2002-09-20


 
Voilà le code:
 
 

Code :
  1. //requete pour aller chercher les informations des champs
  2. $req = mysql_query("
  3. SELECT *
  4. FROM formulaire_bd f_bd INNER JOIN formulaire_gap f_gap ON f_bd.codeing=f_gap.codeing
  5. WHERE f_bd.bd ='OMEGA'
  6. " );
  7. $result = mysql_fetch_array($req);
  8. //requete pour aller chercher les informations des champs
  9. $req2 = mysql_query("
  10. SELECT *
  11. FROM formulaire_bd
  12. WHERE bd ='OMEGA'
  13. " );
  14. $result2 = mysql_fetch_array($req2);
  15. //requete pour aller chercher les informations des champs
  16. $req3 = mysql_query("
  17. SELECT date_entree
  18. FROM formulaire_gap f_gap INNER JOIN formulaire_bd f_bd ON f_bd.codeing=f_gap.codeing
  19. " );
  20. $result3 = mysql_fetch_array($req3);
  21. ?>
  22. <html xmlns:o="urn:schemas-microsoft-com:office:office"
  23. xmlns:x="urn:schemas-microsoft-com:office:excel"
  24. xmlns="www.w3.org/TR/REC-html40&...
  25. <head>
  26. <meta http-equiv="Content-Type" content="text/html; charset=iso-latin-1" />
  27. <meta name="ProgId" content="Excel.Sheet" />
  28. <meta name="Generator" content="Microsoft Excel 9" />
  29. <style>
  30. </style>
  31. </head>
  32. <body>
  33. <table x:str="true" border="1" cellpadding="0" cellspacing="0">
  34.   <tr>
  35.     <td>BD</td>
  36.     <td>NOM</td>
  37.     <td>PRENOM</td>
  38.     <td>DATE D'ENTREE </td>
  39.   </tr>
  40.   <? do { ?>
  41. <tr>
  42.     <td><? echo $result['bd'] ?></td>
  43.     <td><? echo $result['nom'] ?></td>
  44.     <td><? echo $result['prenom'] ?></td>
  45.     <td><? echo $result['date_entree'] ?></td>
  46.   </tr>
  47.   <? } while ($result=mysql_fetch_array($req)); ?>
  48.   <? do { ?>
  49. <tr>
  50.     <td><? echo $result2['bd'] ?></td>
  51.     <td><? echo $result2['nom'] ?></td>
  52.     <td><? echo $result2['prenom'] ?></td>
  53.     <td><? echo $result3['date_entree'] ?></td>
  54.   </tr>
  55.   <? } while ($result2=mysql_fetch_array($req2)); ?>
  56.  
  57. </table>


 
 
(A noter que ce code html sera converti en fichier Excel)
 
Je précise un truc:
 
en faisant ça
 
SELECT *  
FROM formulaire_bd f_bd INNER JOIN formulaire_gap f_gap ON f_bd.codeing=f_gap.codeing  
WHERE f_bd.bd ='OMEGA'
" );
 
la condition " ON f_bd.codeing=f_gap.codeing  " va limiter la liste aux ingés qui se trouvent dans les 2 tables... or je souhaite pouvoir recupérer TOUS les ingés qui appartiennent à la BD 'OMEGA'., y compris ceux qui ne se trouvent pas encore dans la table formulaire_gap
 
 
Ma question: quelle requete sql dois-je faire pour pouvoir récupérer les données propres a un ingénieur dans les tables, sans que tout se melange, et sans avoir de doublons dans ma liste?

Reply

Marsh Posté le 25-07-2005 à 16:40:19   

Reply

Marsh Posté le 25-07-2005 à 17:33:18    

"or je souhaite pouvoir recupérer TOUS les ingés qui appartiennent à la BD 'OMEGA'., y compris ceux qui ne se trouvent pas encore dans la table formulaire_gap"
 
=> LEFT JOIN (jointure externe)
 
Sinon, plutôt que de faire des do ... while, fais des while tout court, c'est plus logique !
 
Et enfin, je vois pas dans ton code où tu affiches les infos de la requête req3 ... et tu mélanges dans le code l'affichage d'infos de req2 avec une infos de la 1ère ligne de req3 ( => echo $result3['date_entree'] ).
 
Relis ton code, et réécris-le plus proprement.
 
PS: évite les SELECT * et tape plutôt les noms de champs, c'est plus lisible et ça empêche de faire des erreurs.
 
edit: voici en gros la requête qu'il te faut utiliser (et il n'y aura donc qu'un seul while dans ton code pour afficher les données):
 

Code :
  1. SELECT f_bd.nom, f_bd.prenom, f_gap.date_entree
  2. FROM formulaire_bd f_bd
  3. LEFT JOIN formulaire_gap f_gap ON f_bd.codeing=f_gap.codeing 
  4. WHERE f_bd.bd ='OMEGA';



Message édité par Beegee le 25-07-2005 à 17:36:30
Reply

Marsh Posté le 25-07-2005 à 17:48:22    

desperado007 : Ton post n'incite pas à la lecture. :sweat:
 
Si tu as un pb SQL, pas besoin de fournir un infect mélange SQL / PHP / HTML.
 
=> Réduire le problème avant de l'exposer.
 
Sinon, je crois que tu as une réponse avec le LEFT JOIN de Beegee, qui a eu plus de courage que moi -- c'est fin de journée, hein. :o


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 26-07-2005 à 09:07:52    

héhé dsl pour le pavé, je voulais juste essayer d'etre le plus précis possible ;)
 
En tout cas merci à Beegee, sa requête a l'air de bien fonctionner!!

Reply

Marsh Posté le 26-07-2005 à 09:11:39    

Une question toute bete, si jamais je dois taper dans 3 tables plutot que 2, il faudra que jai recours à LEFT JOIN à nouveau?:
 
SELECT f_bd.nom, f_bd.prenom, f_gap.date_entree  
FROM formulaire_bd f_bd  
LEFT JOIN formulaire_gap f_gap
LEFT JOIN formulaire_gap f_rrh
 ON f_bd.codeing=f_gap.codeing    
WHERE f_bd.bd ='OMEGA';
 
c possible?

Reply

Marsh Posté le 26-07-2005 à 09:35:15    

je me suis planté, la 4eme ligne c  
LEFT JOIN formulaire_rrh f_rrh  
et pas
LEFT JOIN formulaire_gap f_rrh
...

Reply

Marsh Posté le 26-07-2005 à 10:40:48    

oui c'est possible, mais veille à bien mettre "ON toto = tata" pour chaque LEFT JOIN.

Reply

Marsh Posté le 26-07-2005 à 10:56:13    

en fait je me suis rendu compte que le LEFT JOIN ne m'aidait pas beaucoup pour ce que je veux faire avec cette 3eme table ...
 
je me suis resolu à faire 2 requetes séparemment, peut etre que c possible avec une seule mais j'y arrive pas...
 
voilà g donc cette requete pour lier 2 tables:
 
SELECT f_bd.bd, f_bd.nom, f_bd.prenom, f_gap.date_entree
FROM formulaire_bd f_bd LEFT JOIN formulaire_gap f_gap ON f_bd.codeing=f_gap.codeing  
WHERE f_bd.bd ='OMEGA'
 
et celle là pour récupérer les données de la 3eme table formulaire_transfert:
 
SELECT f_trans.bd, f_trans.nom, f_trans.prenom, f_trans.bd_arrivee, f_trans.motif_trans
FROM formulaire_transfert f_trans
WHERE f_trans.bd ='OMEGA';
 
j'ai bien essayé de mettre un UNION pour obtenir le resultat dans une seule requête, mais en vain.

Reply

Sujets relatifs:

Leave a Replay

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