Aller au contenu

mysql - recursivité


coco2009

Sujets conseillés

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

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

Posté (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é par coco2009
Lien vers le commentaire
Partager sur d’autres sites

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

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 0
recursif(0);

Modifié par smile
Lien vers le commentaire
Partager sur d’autres sites

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...