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

kamerleon

Nouveau membre
Bonjour à tous et toutes,

Le contexte :
Je souhaite afficher le résultat d'une requête de type :
[cpp]SELECT t1.champ1, t1.champ2, t2.champ1
FROM table AS t1 INNER JOIN table AS t2
ON t1.id_parent=t2.id[/cpp]
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!
 

zeb

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

kamerleon

Nouveau membre
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 :
[cpp]$query="SELECT t1.champ1
FROM ( table1 AS t1 INNER JOIN table2 AS t2 ON t1.idtable1=t2.idtable1 )
GROUP BY t1.champ1";

$result=mysql_query($query)or die("La requête $query à échoué!");

echo ("La variable result contient :<BR>");
while($line=mysql_fetch_array($result)){
foreach ($line as $cell){
echo $cell."<BR>";
}
}[/cpp]
Chez moi ça affiche quelque chose de ce type là :
[cpp]La variable result contient :
valeur1
valeur1
valeur2
valeur2
valeur3
valeur3
//...
//et ce, autant de fois que j'ai de valeurs qui répondent à la raquête.[/cpp]
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
 

zeb

Modérateur
kamerleon> Aucune idée avec les éléments donnés.

Teste tes requêtes indépendemment de php, si tu peux.
 

kamerleon

Nouveau membre
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 :
[cpp]$query="SELECT t1.champ1
FROM ( table1 AS t1 INNER JOIN table2 AS t2 ON t1.idtable1=t2.idtable1 )
GROUP BY t1.champ1";

$result=mysql_query($query)or die("La requête $query à échoué!" );

echo ("La variable result contient :<BR>" );
while($line=mysql_fetch_array($result)){
foreach ($line as $cell){
echo $cell."<BR>";
}
}[/cpp]Tu verras, que les valeurs se répètent deux fois
Merci déjà d'y avoir prêté attention ^^
 

kamerleon

Nouveau membre
J'ai entendu parler d'un paramêtre à rajouter dans le mysql_fetch_array :
[cpp]while ($line= mysql_fetch_array($result,MYSQL_ASSOC)) {
echo $line['champ1'];
}[/cpp]Mais je n'ai pas eu d'autres explications quelqu'un saurait-il à quoi il sert? Merci d'avance
 

kamerleon

Nouveau membre
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
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 101
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut