Bonjour,
Cela fait trois jour que j'essaye de trouver un moyen d'effectuer une recherche dans un arbre d'objet.*
Je fais ceci en PHP et dans ma base, mes objets ce présente comme ceci :
Un Objet ayant un nom et une liste d'enfant de même type
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE `ELEMENT` ( `ID` varchar(255) collate latin1_general_ci NOT NULL, `NOM` varchar(255) collate latin1_general_ci default NULL, `DECLINAISON` varchar(255) collate latin1_general_ci default NULL, `DESCRIPTION` text collate latin1_general_ci, PRIMARY KEY (`ID`) );
Lorsque je fais une recherche filtrée (sur le nom de type nom = %filtre%), je fais une recherche en spécifiant les éléments racines, leur fils et leur petit fils. Pour pouvoir remonter un élément qui peut ne pas correspondre mais qui peut avoir un fils (ou petit fils) correspondant et ne remontant que les éléments respectant ce critère.
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
16 class Element { private $_dao; // objet public $_id; // string public $_nom; // string public $_parent; // objet element public $_declinaison; // id de l'objet parent public $_description; public $_enfant; public function __construct($donnees = null, $parent = null,$filtre=null) { // si $donnees (reponse SQL), je récupère les élément id, nom, declinaison et description // si $parent, je récupère parent // avec $_dao, je recherche les enfants avec getElements($this, $filtre) } ...
Bon, j'espère que mes explications ne sont pas trop confuse. Pour faire simple, j'essaye de filtré un arbre d’éléments en affichant uniquement les éléments correspondant au filtre et les parents de ceux-là. Tous ca en PHP.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 class Dao{ public function getElements($parent = null,$filtre=null) { // je fais une recherche sur la table Element // si j'ai un filtre je fais une jointure pour avoir les fils et les petit fils // si j'ai un parent, je cherche les filles (declinaison = id du parent) // si j'ai un filtre je recherche un element fils ayant un nom qui correspond au filtre (ou un de ces fils ou de ces petit fils // je retourne la liste }
Je n'arrive pas à voir comment je peux faire sans spécifier le niveau de recherche (ajouter des jointures pour les enfants et petit enfants). Comment je fais si j'ai des petit-petit fils ? Et lorsqu'un élément correspond aux critères, afficher tous ses fils et petits fils.
Est-ce que vous connaissez un paterne applicable en PHP ?
J'espère juste que je poste au bonne endroit.
Partager