Ich habe eine MySQL-Tabelle, die wie eine verschachtelte Menge wirkt, um eine Hierarchie von Kategorien zu enthalten. Das Tabellenschema wie folgt aussieht:Durchsuchen einer verschachtelten Menge
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
und rgt
die linken und rechten Grenzen eines Knotens (die Art und Weise ein verschachtelter Satz funktioniert, ist, dass jeder ID des Knotens innerhalb seiner elterlichen Grenzen fällt) definieren, und parent_id
gibt den übergeordneten Knoten . Der eindeutige Index ermöglicht mehrere Kategorien mit demselben Namen, sofern sie nicht denselben übergeordneten Namen haben.
Ich versuche, einen richtigen Weg zu finden, einen bestimmten Knoten in der Menge zu finden, basierend auf Hierarchie. Wenn ich beispielsweise nach foo/bar/baz suche, möchte ich den Knoten namens baz abrufen, dessen Elternteil den Namen bar trägt und dessen Elternteil foo heißt. Natürlich kann ich nicht nur nach Namen suchen, da es mehrere Kategorien mit demselben Namen geben könnte. Die Art, wie ich das tun kann, ist, die oberste Kategorie zu finden und dann jede nachfolgende Kategorie mit dem gegebenen Namen zu finden, deren Eltern-ID die der vorher gefundenen Kategorie ist, aber das scheint mir nicht sehr effizient zu sein. Gibt es eine bessere Möglichkeit, ein verschachteltes Set zu durchsuchen?
Ich glaube nicht, dass Sie die Frage ganz verstanden haben; Ich habe separate Tabellen für Kategorien und Gegenstände, aber ich bin nicht besorgt über Gegenstände hier. Ich möchte nur die ID einer bestimmten Kategorie basierend auf einer bestimmten Hierarchie erhalten. –