cs_oceanrider
Messages postés13Date d'inscriptionjeudi 18 novembre 2004StatutMembreDernière intervention20 juillet 2011
-
24 mars 2006 à 00:39
cs_oceanrider
Messages postés13Date d'inscriptionjeudi 18 novembre 2004StatutMembreDernière intervention20 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.
titreidCat 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")
cs_oceanrider
Messages postés13Date d'inscriptionjeudi 18 novembre 2004StatutMembreDernière intervention20 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é !
cs_oceanrider
Messages postés13Date d'inscriptionjeudi 18 novembre 2004StatutMembreDernière intervention20 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.
cs_oceanrider
Messages postés13Date d'inscriptionjeudi 18 novembre 2004StatutMembreDernière intervention20 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];