Bonjour à toutes et tous,

Je m'arrache les cheveux depuis 3 jours afin d'afficher la liste de mes entités de manière ordonné et compréhensible. Je m'explique.

J'ai une table entité contruite de la sorte : idEntite, nomEntite, refEntite

ex:
1 Magasin 1
2 Leclerc 1-2
3 Auchan 1-3
4 Leclerc Bordeaux 1-2-4
5 Auchan Paris 1-3-5
6 Auchan Paris 5eme 1-3-5-6

La référence sert à identifier ou se situe l'entité dans l'arborescence et est constitué de l'id des entités parents ainsi que la sienne(une entité peux contenir une entité, qui elle même en contiendra 1 ou 2 ou 20, bref vous comprennez la logique).

Je souhaite récupérer ces résultats depuis ma base mariaDB et les afficher avec des puces ET SURTOUT par ordre alphabétique afin d'obtenir le résultat suivant :

Magasin
Auchan
Auchan Paris
Auchan Paris 5eme
Leclerc
Leclerc Bordeaux

Voila, ca parait tout bête comme ca, mais quand on commence réellement à mettre en pratique on se rend compte que c'est une vrai galère.

Il existe peut etre une manière de construire la requete SQL afin d'avoir déjà l'arborescence dans le bon ordre mais mes connaissances sql sont limités. Lorsqu'on trie par ref, l'arborescence est dans le bon ordre mais pas les noms, et lorsque l'on trie par nom c'est l'inverse, bref je sèche.

Merci par avance à celles et ceux qui déciderons de m'aider à résoudre ce problème.

Cédric

4 réponses


Salut, peux-tu expliciter le résultat attendu ? j'ai du mal à comprendre..
Pour la colonne refEntite j'ai l'impression que tu fais quelque chose d'inutilement compliqué (c'est souvent le cas quand on commence^^), as tu regardé du côté des jointures SQL, il y a un tuto de Grafikart je crois !

Xeus
Auteur

Bonjour JRcode,

Je viens de voir que cela n'a pas pris en compte le formattage que j'ai donné au texte, normal que tu ne comprennes pas :).

En fait dans le résultat, il faut imaginer une incrémentation de puce à chaque fois qu'une entité est une fille de la précédente. Mais surtout, toutes les entités sont classés dans l'ordre alphabétique. En fait c'est ca le plus complexe, réussir à garder l'arborescence tout en classant les entités puis sous-entité, etc dans l'ordre alphabétique.

Pour la colonne ref, effetivement c'est un peu plus compliqué que de mettre l'id du parent comme le montre grafikart dans son cours sur sql (j'ai regardé la vidéo sur la requete récursive hier) mais je trouve ca beaucoup plus simple pour afficher ensuite les entités enfants d'une entité.

Par exemple pour afficher toutes les entités enfants de Auchan (ref 1-3), tu fais une requete toute simple avec un like '1-3%' sur la ref et c'est fini.
Je trouve ca plus simple que de faire une requete récursive pour trouver le premier enfant, puis le second...

Bon après je fonctionne comme ca parce que effectivement je suis un novice en SQL :D

Hello,

Pour ce qui est de l'ordre alphabtique, Est-ce que tu a essayé "ORDER BY nomEntite" ?

Pour les puces, ça doit être possibe de le faire en SQL, mais je pense que tu peux le faire beaucoup plus facilement dans le code.

Donc si je comprends bien tu souhaiterais un classement par arborescence (magasin, puis marque de magasin avec pour chaque marque les localités) tout en ayant un ordre (les magasins par ordre alphabétique puis pour chaque magasin les localités par ordre alphabétique) ?

Niveau structuration et compréhension de ce que tu vas écrire comme code je partirais plutôt avec une bdd organisée comme cela :
ID --- Type entité --- Marque --- Localisation
1 --- Magasin --- Leclerc --- Bordeaux
2 --- Magasin --- Auchan --- Paris
3 --- Magasin --- Auchan --- Paris 5ème

Ensuite avec des boucles PHP ou autre tu peux créer des reqûetes pour afficher toute ton arborescence avec un tri par ordre alphabétique à chaque incrémentation de puce

En espérant que cela puisse t'aider ;)