coco2009 Posté 19 Mai 2009 Partager Posté 19 Mai 2009 Bonjour, me voici avec un pb lié à la recursivité mysql il me semble, et je ne sais comment m'en dépatouiller, ni même comment l'expliquer... j'ai 2 tables : genre - idGenre - idParent - nom event_genre - idEvent - idGenre ce qui donne par exemple: pour la table genre 1 | 0 | cine 2 | 1 | policier 3 | 0 | musique pour la table event_genre 1 | 1 1 | 2 <------ à remonter 1 | 3 <------ à remonter je voudrais remonter de la table event les lignes (couple idEvent/idGenre) qui correspondent aux genres les plus profonds, sachant que je ne connais pas forcement la profondeur de mon arbre genre avez vous une idée ? Merci, Sandrine Lien vers le commentaire Partager sur d’autres sites More sharing options...
yuston Posté 19 Mai 2009 Partager Posté 19 Mai 2009 Salut, il faut pour cela utiliser les jointures. Tu trouveras beaucoup de documentation sur le Net. Dans ton cas, je présume que ce sera un code de ce style: SELECT genre.idGenre, genre.idParent, genre.nom, event_genre.idEvent, event_genre.idGenre WHERE event_genre.idGenre = genre.idGenre Bonne chance! Lien vers le commentaire Partager sur d’autres sites More sharing options...
coco2009 Posté 19 Mai 2009 Auteur Partager Posté 19 Mai 2009 (modifié) non ce n'est pas ce que je cherche. je ne veux remonter que les event_genre.idGenre les plus profond de mon arboresence. les seules valeurs qui m'intéresse sont (en gras) : pour la table event_genre 1 | 1 1 | 2 1 | 3 je vais essayer d'être plus claire : j'ai 1 événement (the rocky horror picture show) classé dans diverse catégories (cinéma - horreur - comédie - theatre) traduit dans ma base ca donne : table_genre (liste de tous les genres) idGenre | idParent | nom 1 | 0 | cine 2 | 1 | horreur 3 | 1 | comedie 4 | 0 | théatre table_event (liste de tous les événement) idEvent | nom 1 | the rocky horror picture show table_event_genre (jointure n (event) -> n (genre) ) idEvent | idGenre 1 | 1 1 | 2 1 | 3 1 | 4 je souhaite extraire uniquement les données qui appartiennent au sous catégories les plus profonde : la ligne 1 | 1 ("the rocky horror picture show" - "cine") de la table ci dessus ne m'intéresse pas puisque les lignes 1 | 2 ("the rocky horror picture show" - "cine>horreur") 1 | 3 ("the rocky horror picture show" - "cine>comedie") existent Modifié 19 Mai 2009 par coco2009 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kioob Posté 19 Mai 2009 Partager Posté 19 Mai 2009 Hello, à ma connaissance MySQL ne gère pas la récursivité (contrairement à Oracle). Mais il y a probablement moyen de gérer ça via les procédures stockées, as tu regardé de ce coté ? Chez nous on a résolu ce problème en utilisant une table "précalculée" contenant les résultats de traitements récursifs PHP... mais ce n'est pas adapté à toutes les applications. Lien vers le commentaire Partager sur d’autres sites More sharing options...
smile Posté 20 Mai 2009 Partager Posté 20 Mai 2009 (modifié) IL y'a en effet la possibilité de faire une fonction recursive avec une requète qui sera une jointure de tes tables genre et event_genre en gros ca donne : function recursif($id){ $sql="SELECT *,genre.idgenre as idi FROM genre,event_genre WHERE genre.idgenre=event_genre.idgenre and idParent='$id'"; $rt=mysql_query($sql, $lk); while ($data = mysql_fetch_array($rt)) { recursif($data['idi']); }}//appel parent 0recursif(0); Modifié 20 Mai 2009 par smile Lien vers le commentaire Partager sur d’autres sites More sharing options...
coco2009 Posté 21 Mai 2009 Auteur Partager Posté 21 Mai 2009 Merci pour ces pistes. Je vais tester ta fonction Smile (qui est moins torturée que celle que j'ai faite) ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
smile Posté 22 Mai 2009 Partager Posté 22 Mai 2009 L'idéal étant d'appliquer le même principe dans un tableau, récupérer une seule fois les données de ta table et ensuite faire une fonction récursive sur le tableau et non appelé ta table à chaque fois. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant