affichage de double requetes dans un seul tableau

affichage de double requetes dans un seul tableau - PHP - Programmation

Marsh Posté le 20-05-2009 à 03:51:57    

salut j'utilise mysql et je voudrais afficher le contenu de 2 tables mysql dans un seul tableau le problème c'est que les enregistrement ne s'affiche pas comme il en faut voici mon script seulement pour la première colonne
 

Code :
  1. //requete1
  2. $requete_gen="select * from type_matiere_premiere,matiere_premiere where type_matiere_premiere.code_mat_pre=matiere_premiere.code_mat_pre";
  3. $result1=mysql_query($requete_gen)OR die(mysql_error());
  4. //requete 2 en relation avec une variable globale $n_cat
  5. $requete_consom="select * from article,consommer,type_matiere_premiere,categorie,entree_stock where entree_stock.code_typ_mat_pre=type_matiere_premiere.code_typ_mat_pre and article.n_cat=categorie.n_cat and article.n_art=consommer.n_art and consommer.code_typ_mat_pre=type_matiere_premiere.code_typ_mat_pre and categorie.n_cat='$n_cat'";
  6. $result2=mysql_query($requete_consom)OR die(mysql_error());
  7. while ($ligne2=mysql_fetch_assoc($result2))
  8. //le premier while en effet devra me permettre d'afficher tous les enregistrements dans ma base le secon while c'est uniqument ceux en relation avec ma variabl globale
  9. {
  10. while($ligne1=mysql_fetch_assoc($result1))
  11. {
  12. echo'<tr><td>'.$ligne1["des_typ_mat_pre"].'</td>';
  13. if($ligne1['code_typ_mat_pre']==$ligne2['code_typ_mat_pre'])
  14. {
  15. //si condition vérifié affiche prix
  16. echo'<td>'.$ligne2["pr_ttc"].'</td></tr>';
  17. }
  18. else
  19. //sinon doit afficher un zéro
  20. {
  21. echo"<td>0</td></tr>";
  22. }
  23. }


merci pour votre aide

Reply

Marsh Posté le 20-05-2009 à 03:51:57   

Reply

Marsh Posté le 20-05-2009 à 16:08:51    

roy mustang a écrit :

salut j'utilise mysql et je voudrais afficher le contenu de 2 tables mysql dans un seul tableau le problème c'est que les enregistrement ne s'affiche pas comme il en faut


Utilise des balises html pour les afficher "comme il faut"  :whistle:  
 
Sérieusement, ce serait bien d'expliquer un peu plus précisément ton problème.
 
Quelques remarques vite fait :
1. Il vaut mieux éviter de faire des SELECT *, il vaut mieux faire SELECT (liste des champs).
Ca économise de la mémoire (pourquoi stocker 15 champs * nombre d'enregistrements si tu n'en utilises que 2 ?)
Et ça permet d'éviter des éventuels problèmes de maintenance.
 
2. Pourquoi tu ne ferais pas plutôt une seule requête avec une jointure ? A vue de nez c'est faisable (il faut voir en fonction des tables).
 
3. Ton imbrication de while me semble douteuse. Le deuxième while particulièrement :
Au premier passage, tu vas boucler sur ton $result1, mais au deuxième passage mysql_fetch_assoc ne revient pas au début.
Du coup la boucle est quittée tout de suite...

Reply

Marsh Posté le 21-05-2009 à 02:46:32    

macgawel a écrit :


Utilise des balises html pour les afficher "comme il faut"  :whistle:

 

Sérieusement, ce serait bien d'expliquer un peu plus précisément ton problème.

 

Quelques remarques vite fait :
1. Il vaut mieux éviter de faire des SELECT *, il vaut mieux faire SELECT (liste des champs).
Ca économise de la mémoire (pourquoi stocker 15 champs * nombre d'enregistrements si tu n'en utilises que 2 ?)
Et ça permet d'éviter des éventuels problèmes de maintenance.

 

2. Pourquoi tu ne ferais pas plutôt une seule requête avec une jointure ? A vue de nez c'est faisable (il faut voir en fonction des tables).

 

3. Ton imbrication de while me semble douteuse. Le deuxième while particulièrement :
Au premier passage, tu vas boucler sur ton $result1, mais au deuxième passage mysql_fetch_assoc ne revient pas au début.
Du coup la boucle est quittée tout de suite...


pour votre premier point 1 , je vous assure que mes requêtes sont fonctionnelles et que je les ai testé sur phpmyadmin
pour votre point 2, vous vouliez dire the inner join??? aucune idée comment le faire sinon le résultat de chaque requête est différent de l'autre(l'une affiche tous les enregistrements à partir de mes tables mysql et l'autreseulement ceux en cours!)
pour votre point 3, voila voila c'est ça le problème et j'en suis sure!!! avez vous une idée comment le traiter?
j'ai besoin de votre aide merci!!!


Message édité par roy mustang le 21-05-2009 à 02:49:02
Reply

Marsh Posté le 21-05-2009 à 21:08:45    

ce n'est pas parce qu'un SELECT * est fonctionnel qu'il est judicieux ...
 
je rejoins l'avis de macgawel là-dessus : si tu n'utilises qu'un seul champ (ou 2) ça ne sert à rien de rapatrier tous les champs. Et faire SELECT champ1, champ2 FROM ... est tout aussi valable que SELECT * FROM, à la différence près que c'est moins gourmand en ressources (et, selon les schémas des tables dans la base, ça évite aussi de rapatrier n'importe quoi).
 
pour la jointure : pourquoi ne pas faire, au lieu de :

Code :
  1. select * from type_matiere_premiere,matiere_premiere where type_matiere_premiere.code_mat_pre=matiere_premiere.code_mat_pre


ceci :

Code :
  1. SELECT
  2.     tmp.champ1,
  3.     tmp.champ2
  4. FROM
  5.     type_matiere_premiere tmp
  6.     LEFT JOIN
  7.         matiere_premiere mp
  8.     ON
  9.         tmp.code_mat_pre = mp.code_mat_pre
  10. GROUP BY
  11.     tmp.champ1;


par exemple, après reste à appliquer un critère dans le Where, s'il le faut, ou bien un order by, voire un limit s'il y a besoin. Et, bien entendu, déterminer les X champs à rapatrier.
 
dans ton 2nd while, tu génères une ligne à chaque nouveau passage, c'est voulu ainsi ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Sujets relatifs:

Leave a Replay

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