Affichage de la hiérarchie d'une sous-catégorie

Résolu
cs_oceanrider Messages postés 13 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 20 juillet 2011 - 24 mars 2006 à 00:39
cs_oceanrider Messages postés 13 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 20 juillet 2011 - 28 mars 2006 à 21:11
Bonjour,

Je cherche ici une réponse que je n'ai pas encore pu trouver ailleurs, alors qu'il s'agit surement d'un problème assez commun.
J'ai réalisé une vidéothèque en php/mysql ou les films sont classés selon une hiérarchie de catégorie.

La table des catégories ressemble à qq chose comme :
idCat categorie idGenerique
1 film 0
2 docu 0
3 action 1
4 SF 1
5 extraterrestres 4
6 anticipation 4

Le film appartient à la catégorie la plus spécifique.
titre idCat
E.T. 5
minority report 6

J'arrive sans mal à remonter cette hiérarchie du plus précis au plus général ("films d'extraterrestres > SF > films") en bouclant tant que le générique n'est pas 0, mais je ne sais absolument pas comment procéder pour afficher cette hiérarchie dans l'autre sens ("films >science-fiction > films d'extraterrestres")

Si quelqu'un peut m'aider, merci d'avance.

10 réponses

cs_oceanrider Messages postés 13 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 20 juillet 2011
28 mars 2006 à 21:11
Finalement, j'abouti donc à cela (non sans mal) :

//je récupère la catégorie fille de mon film
$reqCategorie="SELECT idGenerique,categorie FROM Categorie,Documents
WHERE idCategorie=X_idCategorie AND idDoc='$idDoc'";
$resCategorie=mysql_query($reqCategorie);
$result=mysql_fetch_row($resCategorie);
$i=1;
$ligne[$i] = $result;

// tant que je ne suis pas arrivé à la
//racine (que le générique n'est pas 0)
while($ligne[$i][0]!=0)
{
$idGenerique=$ligne[$i][0];
//je recherche l'id du parent
$reqCategorie="SELECT idGenerique,categorie FROM Categorie
WHERE idCategorie='$idGenerique'";
$resCategorie=mysql_query($reqCategorie);
$result=mysql_fetch_row($resCategorie);
$i++;
// je stocke dans le tableau dans une nouvelle ligne
$ligne[$i] = $result;
}

// je compte le nombre de lignes
$max = sizeof ($ligne);

//ligne par ligne en partant de la fin, j'affiche
//les categories sauf la dernière
for ($j = $max; $j >= 2; $j --)
{
echo $ligne[$j][1],', ';
}
// j'affiche la dernière catégorie, sans virgule à la fin
echo $ligne[$j][1];

J'obtiens ainsi ce que je voulais obtenir, ceci par exemple : "film, science-fiction, extra-terrestres"

Merci pour vos contributions et votre patience : je suis exigeant sur ce que je veux obtenir mais je ne n'y connais pas grand chose et je ne suis pas très doué !
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mars 2006 à 09:25
hello,

tu stockes tes résultats dans un tableau,et tu le parcours à l'envers pour l'afficher.
0
cs_oceanrider Messages postés 13 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 20 juillet 2011
24 mars 2006 à 12:52
Ok.

Maintenant, comment stocke t'on les résultats dans un tableau, et surtout comment le parcourir à l'envers ?

Merci.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
24 mars 2006 à 13:04
Heu...

$sQuery = 'SELECT truc FROM machin';
$rReq = mysql_query ($sQuery);
while ($aRes = mysql_fetch_row ($rReq)) {
$aTab[] = $aRes;
}
$max = sizeof ($aTab);
for ($i = $max; $i >= 0; $i --) {
echo $aTab[$i][0], '
';
}

par exemple...tu peux aussi faire un array_reverse et le parcourir avec foreach().
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_oceanrider Messages postés 13 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 20 juillet 2011
27 mars 2006 à 23:47
En fait j'ai essayé mais je me retrouve face à une impasse : je récupère ma hiérarchie (inversée) en bouclant ma requête ; je n'ai donc qu'un seul résultat à chaque fois et je ne peux pas construire de tableau dans ce cas :

//je récupère la catégorie fille de mon film
$reqCategorie="SELECT idGenerique,categorie FROM Categorie,Documents WHERE idCategorie=X_idCategorie AND idDoc='$idDoc'";
$resCategorie=mysql_query($reqCategorie);
$ligne=mysql_fetch_array($resCategorie,MYSQL_ASSOC);
extract($ligne);
// tant que je ne suis pas arrivé à la racine
while($idGenerique!=0)
{
$reqCategorie="SELECT idGenerique,categorie FROM Categorie WHERE idCategorie='$idGenerique'";
$resCategorie=mysql_query($reqCategorie);
$ligne=mysql_fetch_array($resCategorie,MYSQL_ASSOC);
extract($ligne);
// j'affiche la catégorie parente de celle précédemment obtenue
echo " > $categorie";
}

Je ne sais pas comment obtenir toute la hiérarchie en une seule requête.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 mars 2006 à 09:25
Non, le problème ce sont tes extract, pas ta boucle. Tu ne mets rien dans un tableau, là.
0
cs_oceanrider Messages postés 13 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 20 juillet 2011
28 mars 2006 à 13:31
J'ai bien essayé ça

$reqCategorie="SELECT idGenerique FROM Categorie,Documents WHERE idCategorie=X_idCategorie AND idDoc='$idDoc'";
$resCategorie=mysql_query($reqCategorie) or die("Une erreur est survenue dans l'éxécution de la requête reqCategories !");
while($result[]=mysql_fetch_row($resCategorie))
{
$ligne[]=$result;
}
echo $ligne[0];

mais ça me renvoie "Array" !
0
krolenain Messages postés 149 Date d'inscription lundi 7 février 2005 Statut Membre Dernière intervention 6 février 2009 1
28 mars 2006 à 13:40
enleve les [] dans ton $result[]
0
cs_oceanrider Messages postés 13 Date d'inscription jeudi 18 novembre 2004 Statut Membre Dernière intervention 20 juillet 2011
28 mars 2006 à 18:17
je suis vraiment désolé, mais ça me renvoie toujours "Array"
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
28 mars 2006 à 19:11
ben évidemment...c'est un tableau!
0
Rejoignez-nous