Aller au contenu
coco2009

mysql - recursivité

Noter ce sujet :

Recommended Posts

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

Partager ce message


Lien à poster
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!

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×
×
  • Créer...