Bonjour à tous !
Avant de commencer, j'ai fait plusieurs recherches, et il existe beaucoup de sujets semblable, mais je n'ai rien trouvé d'assez précis.
J'ai donc un menu du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 - zone 1 -- section 1 -- section 2 - zone 2 -- section 3 --- catégorie 1 --- catégorie 2 -- section 4 etc...
Pour ce menu, je ne ne connais pas le nombre de profondeur de niveaux. Il peut y en avoir une infinité. La seule chose dont je suis sur, c'est qu'il n'y a pas de boucle dans les références.
Pour ce menu, j'ai une table MySQL dont la structure (pour l'exemple) est très simple:
ce qui donne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 - id - parentId - nom
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 1, 0, "zone 1" 2, 1, "section 1" 3, 1, "section 2" 4, 0, "zone 2" 5, 4, "section 3" 6, 5, "catégorie 1" 7, 5, "catégorie 2" 8, 4, "section 4"
Actuellement, tout les résultats sont en ordre. Les zone toujours avant les section, et les section toujours avant les catégories.
Mais considérons que ce soit le "bordel" ( j'ai changé les id, mais la hyérarchie n'à pas changée. Le menu devrait être identique ):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 1, 3, "section 1" 2, 3, "section 2" 3, 0, "zone 1" 4, 7, "catégorie 1" 5, 7, "catégorie 2" 6, 0, "zone 2" 7, 6, "section 3" 8, 6, "section 4"
Je cherche à effectuer une (1) requête afin de récupérer l'ensemble des données et de pouvoir constituer soit un array multi-dimensionnel, soit un objets qui se contiens lui-même récursivement (pattern composite je crois)
Actuellement, si je charge les données, j'aurais un problème:
Lorsque je voudrais associer la catégorie 1 (id #4), je ne pourrais pas, car l'item section 3 (id #7) n'existe pas encore...
donc logiquement, je me dis que je devrais faire une fonction récursive, telle que:
... sauf que cette méthode implique de faire une requête de facon récursive, et je ne veux pas faire celà.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 function loadMenu($parentId) { //Trouver et charger tous les éléments parentId = $parentId .... $arr[] = mysql_fetch_assoc(....); foreach($arr as $key=>$elem) $arr[$key]['sub'] = loadMenu($elem['parentId']); //Charger tous les éléments enfants return $arr; } $arr = loadMenu(0); var_dump($arr);
Ma question est donc: En une seule requête, comment puis-je, extraire mes résultats efficacement dans ce cas de figure ?
Question connexe:
En terme de performance, puis-je me permettre de faire des exécution de requête de facon récursive si j'utilise PDO avec une requête préparée ?
Partager