FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » jointure d'une table réflexive : Problème d'affichage
 

jointure d'une table réflexive : Problème d'affichage

Overclocking & Tuning : fifi2191 et 87 utilisateurs inconnus
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : jointure d'une table réflexive : Problème d'affichage
 
Plus d'informations

Bonjour à tous et toutes,
 
Le contexte :
Je souhaite afficher le résultat d'une requête de type :

Code :
  1. SELECT t1.champ1, t1.champ2, t2.champ1
  2. FROM table AS t1 INNER JOIN table AS t2
  3. ON t1.id_parent=t2.id


La table en question est réflexive (id_parent indique l'id d'une autre ligne dans la même table)
table(id, id_parent, champ1, champ2)
La requête est générée par un code php, soumise à phpMyAdmin puis affichée dans un tableau
Le problème n°1 :
La variable contient les valeurs de tous les champs que j'ai à afficher en double...
Pseudo-solution : je n'affichais qu'une fois sur deux les résultats (méthode très peu recommandée vu la suite)
 
Le problème n°2 :
Dans le cas d'une jointure sur une table réfléxive, les valeurs de t1.champ1 et de t2.champ1 ne sont pas en double.
Ce qui implique un décalage très désagréable dans le tableau d'affichage des résultat de la requête.
 
Le plus étrange c'est qu'à titre de vérification j'ai copié ma requête générée en php directement sous phpMyAdmin et que là tout marche très bien et phpMyAdmin ne semble, lui, pas avoir de mal à distinguer les cas où il n'y à qu'une fois la valeur de ceux où elle est double.
 
Ce que j'aimerais c'est avoir toujours toutes les valeurs en double dans mon résultat (là au pire je prends mon système D pour afficher quelque chose de correct) ou alors qu'on me dise d'où vient cette étrangeté.  
 
[edit]
Désolé je pensais m'être bien exprimé.
 
j'envoie un requête SQL via php et je récupère le tout dans une variable.
A mon grand étonnement toutes les valeurs sont répétées deux fois SAUF celles qui sont concernées par la jointure de table réflexive : dans mon exemple il s'agit de "champ1".
 
Mes questions sont :
1) Pourquoi les valeurs sont-elles répétées? (c'est pour ça que je les affiche une fois sur deux)
2) SI recevoir les valeurs en double est normal, pourquoi certaines ne sont pas en double comme les autres?
 
Voilà, encore désolé de vous avoir embrouillé
C'était ce qui me permet d'afficher le résultat dans un tableau (Y a plein de variables mais c'est pour savoir quand revenir à la ligne)

 
Merci d'avance!


Message édité par kamerleon le 09-07-2007 à 23:34:38

Profil : Pointeur
Plus d'informations

rien compris !


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
zeb
Profil : Modérateur libre
Plus d'informations

kamerleon>> Je crois que tu devrais mettre le code "normal" qui plante plutôt que ton code qui "corrige mal".


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Bon je pose trop de question en même temps peut-être alors je vais vous emmener avec moi dans cette belle incompréhension en commençant par ça :

Code :
  1. $query="SELECT t1.champ1
  2. FROM ( table1 AS t1 INNER JOIN table2 AS t2 ON t1.idtable1=t2.idtable1 )
  3. GROUP BY t1.champ1";
  4. $result=mysql_query($query)or die("La requête $query à échoué!" );
  5. echo ("La variable result contient :<BR>" );
  6. while($line=mysql_fetch_array($result)){
  7.     foreach ($line as $cell){
  8.         echo $cell."<BR>";
  9.     }
  10. }


Chez moi ça affiche quelque chose de ce type là :

Code :
  1. La variable result contient :
  2. valeur1
  3. valeur1
  4. valeur2
  5. valeur2
  6. valeur3
  7. valeur3
  8. //...
  9. //et ce, autant de fois que j'ai de valeurs qui répondent à la raquête.


La question c'est pourquoi ma variable $result contient tous les champs en double?
 
Merci de me dire s'il faut que je précise quelque chose


Message édité par kamerleon le 13-07-2007 à 10:04:20
Profil : Pointeur
Plus d'informations

bha parce qu'elle y est plusieurs fois ....
 
essaye avec distinct :o


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
zeb
Profil : Modérateur libre
Plus d'informations

Euh, il y a un GROUP BY quand même !!!


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Profil : Pointeur
Plus d'informations

ha bha oui ... :/


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
zeb
Profil : Modérateur libre
Plus d'informations

kamerleon> Aucune idée avec les éléments donnés.
 
Teste tes requêtes indépendemment de php, si tu peux.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Sous MySQL tout se passe très bien. phpMyAdmin me fait un joli tableau.
 
C'est en php que le problème se situe puisque je souhaite récupérer les résultats dans une variable puis afficher ces résultats.
 
Pour tester crée deux tables à deux champs sous phpmyAdmin, et dans ta page php connectes toi à ta base ainsi créée et reprends ce code pour afficher :

Code :
  1. $query="SELECT t1.champ1
  2.   FROM ( table1 AS t1 INNER JOIN table2 AS t2 ON t1.idtable1=t2.idtable1 )
  3.   GROUP BY t1.champ1";
  4.  
  5.   $result=mysql_query($query)or die("La requête $query à échoué!" );
  6.  
  7.   echo ("La variable result contient :<BR>" );
  8.   while($line=mysql_fetch_array($result)){
  9.   foreach ($line as $cell){
  10.   echo $cell."<BR>";
  11. }
  12. }

Tu verras, que les valeurs se répètent deux fois
Merci déjà d'y avoir prêté attention ^^

Plus d'informations

J'ai entendu parler d'un paramêtre à rajouter dans le mysql_fetch_array :

Code :
  1. while ($line= mysql_fetch_array($result,MYSQL_ASSOC)) {
  2. echo $line['champ1'];
  3. }

Mais je n'ai pas eu d'autres explications quelqu'un saurait-il à quoi il sert? Merci d'avance

Profil : Pointeur
Plus d'informations
zeb
Profil : Modérateur libre
Plus d'informations

echo $SOLUCE_KANGOL | sed s/be2/fr/

:lol:


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Profil : Pointeur
Plus d'informations

hey !


---------------
Da Bidz Triad©®™: Bidz Interceptor
.:: Smileyz version 4.2 [050625]::. -- Code source disponible sous licence GPL.
[u
Plus d'informations

zeb>mdr

 

Kangol> Ouais ok merci pour le lien
En fait c'est comme mysql_fetch_assoc() sauf qu'on met la constante MYSQL_ASSOC pour dire qu'on souhaite avoir un tableau associatif. En fait ça revient à utiliser mysql_fetch_assoc(), mais bon j'avais un doute


Message édité par kamerleon le 20-07-2007 à 09:27:33

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » jointure d'une table réflexive : Problème d'affichage
 

Annonces Google
Publicité