2009-09-29 3 views
5

에 저장 종류의 빵 부스러기를 생성 주어진 category_id에 대한 이동 경로 예를 빵 부스러기 (CATEGORY_ID)에 대한, 나는 카테고리 이런 식으로 저장 MySQL의에서 MySQL을

: 일반> 하위 1> 하위 2

이론이있을 수 무제한 수준. PHP를 사용하고 있습니다.

업데이트 : 중첩 세트 모델에 대해이 기사 (http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/)를 보았습니다. 흥미롭게 보이지만 이전에 카테고리를 동적으로 관리하는 방법에 대해 어떻게 생각하십니까? 시간에 앞서 범주를 알고있을 때와 같이 종이에서보기가 쉬워 보이지만 사용자가 즉시 범주를 작성/삭제/편집 할 수있는 것은 아닙니다 ... 어떻게 생각하십니까?

+1

계층 적 쿼리 : http://explainextended.com/2009/03/17/hierarchical-queries-in-mysql/ –

답변

0

기존 상위 모델에서 생성 (원하는대로)하고 캐시합니다. 즉석에서 생성하기에는 너무 비싸며 다른 계층의 변경 사항보다 계층 구조의 변경 사항이 보통 몇 배 정도 적습니다. 계층 구조가 바뀔 것이므로 중첩 된 세트 모델을 신경 쓰지 않을 것입니다. 그런 다음 왼쪽과 오른쪽으로 장난해야합니다. (이 기사에는 추가 및 삭제를위한 레시피가 포함되어 있습니다 (상위 모델에서는 매우 간단 함).

1

브로드 캐스트를 기본적으로 포함하고 있으므로 재귀 쿼리를 사용하지 않고 노드의 모든 자손을 선택하는 등의 작업을 쉽게 수행 할 수 있으므로 Materialized Path 메서드를 사용하고 싶습니다.

구체화 경로 모델은

구체화 된 경로 모델과 아이디어는 트리에서의 위치와 계층 구조의 각 노드를 연결하는 것입니다. 이는 조상 (ancestor) 인 모든 노드의 연결 목록으로 수행됩니다. 이 목록은 대개 구분 된 문자열로 저장됩니다. 아래 "계보"란에 유의하십시오. 테이블을 순회 CAT_ID NAME CAT_PARENT Lineage 1 Home . 2 product 1 .1 3 CD’s 2 .1.2 4 LP’s 2 .1.2 5 Artists 1 .1 6 Genre 5 .1. 5 7 R&B 6 .1. 5.6 8 Rock 6 .1. 5.6 9 About Us 1 .1

Select lpad('-',length(t1.lineage))||t1.name listing 
From category t1, category t2 
Where t1.lineage like t2.lineage ||'%' 
    And t2.name = 'Home'; 
Order by t1.lineage; 

목록

Home 
-product 
–CD’s 
–LP’s 
-Artists 
–Genre 
—R&B 
—Rock 
-About Us 
+0

링크 나를 위해 작동 @lapin – lapin

+0

죽은, 내용은 링크가 죽었 – RedFilter

0

중첩 된 세트의 아름다움은 쉽게 몇 가지 간단한 SQL 문으로 그래프에서 노드를 추가/제거 할 수 있다는 것입니다 . 모든 비용이 비싸지 않고 꽤 빨리 코딩 될 수 있습니다.

PHP를 사용하는 경우 (또는 사용하지 않는 경우에도)이 코드를 보면 adding nodes to a nested set model (archive.org backup)이라는 매우 간단한 구현을 볼 수 있습니다. 제거 (또는 이동)도 마찬가지로 간단합니다. MySQL은

+0

위에 추가 – lapin

+0

@lapin - 죽은 링크의 archive.org 링크가 추가되었습니다. – timdev

관련 문제