我有一个MySQL表,其行为像一个嵌套集以包含类别的层次结构。该表的模式是这样的:搜索嵌套集
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
和rgt
定义节点(一组嵌套的工作原理是,每个节点的ID属于母公司的边界内的方式)的左右边界,并parent_id
指定的父节点。唯一索引允许有多个具有相同名称的类别,只要它们不具有相同的父级。
我想找出一个适当的方法来找到集合中的特定节点,根据层次结构。例如,如果我查找foo/bar/baz,我想要检索名为baz的父节点名为bar的节点,其父节点名为foo。很显然,我不能只按名称搜索,因为可能会有多个具有相同名称的类别。
我能想到这样做的方法是找到最上面的类别,然后找到每个后续类别,其中父母id是先前找到的类别的给定名称,但这对我来说似乎不是很有效。有没有更好的方法来搜索嵌套集?
我不认为你完全明白这个问题;我确实有类别和项目的单独表格,但我不关心这里的项目。我只想根据给定的层次结构获取特定类别的ID。 – 2009-08-16 04:29:57