J'ai une table MySQL qui agit comme un ensemble imbriqué afin de contenir une hiérarchie de catégories. Le schéma de la table ressemble à:Recherche un ensemble imbriqué
CREATE TABLE IF NOT EXISTS `categories` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(200) NOT NULL,
`parent_id` int(11) default NULL,
`lft` int(11) default NULL,
`rgt` int(11) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `index_categories_on_parent_id_and_name` (`parent_id`,`name`)
)
lft
et rgt
définissent gauche et à droite limites d'un noeud (la façon dont fonctionne un ensemble imbriqué est que l'identifiant de chaque nœud se situe dans les limites de son parent) et parent_id
spécifie le nœud parent . L'index unique permet d'avoir plusieurs catégories avec le même nom, tant qu'elles n'ont pas le même parent.
J'essaie de trouver une façon de trouver un nœud spécifique dans l'ensemble, sur la base de hiérarchie. Par exemple, si je cherche foo/bar/baz, je veux récupérer le nœud nommé baz, dont le parent est nommé bar, dont le parent est nommé foo. Évidemment, je ne peux pas faire une recherche par nom, car il pourrait y avoir plusieurs catégories avec le même nom.
La façon dont je peux penser à faire ceci est de trouver la catégorie supérieure, puis trouver chaque catégorie suivante avec le nom donné dont l'ID parent est celui de la catégorie précédemment trouvée, mais cela ne me semble pas très efficace. Existe-t-il une meilleure façon de rechercher un ensemble imbriqué?
Je ne pense pas que vous ayez bien compris la question; J'ai des tableaux séparés pour les catégories et les articles, mais je ne suis pas préoccupé par les articles ici. Je veux juste obtenir l'ID d'une catégorie spécifique, basée sur une hiérarchie donnée. –