카테고리 계층 구조를 포함하기 위해 중첩 세트처럼 작동하는 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를 얻고 싶다. –