2013-10-03 2 views
4

나는 & ParentID 열이 포함 된 categories 테이블을 가지고 있습니다. Level이라는 필드를 추가하고 싶습니다.이 필드는 각 카테고리 트리의 어느 레벨에 속하는지 나타냅니다. 내 솔루션을 찾은 것 같지만 그것은 MySQL이 아니라 mysql입니다. 그래서 올바른 구문으로 변환되었습니다. 그러나 나는 메신저가 한 발짝도 빠뜨린 것 같아. 그래서, 여기 내 코드입니다 : 나는 문제가 내 DB에있는 범주의 순서는 어떤 특정 순서로 제공되지 않습니다 있다는 사실에 거짓말 같아요MySQL Order by, Update Inner Join

ALTER TABLE categories DROP Level; 

ALTER TABLE categories ADD Level INT NULL; 

UPDATE categories 
SET Level = 0 
WHERE ParentID IS NULL; 

UPDATE categories AS A 
    INNER JOIN categories B ON A.ParentID = B.ID 
    SET A.Level = B.Level + 1 
WHERE A.Level IS NULL AND 
      B.Level IS NOT NULL; 

다음과 같이 내가 무슨 뜻입니다 :

ID ParentID 
2 NULL 0 
4 55 
7 2 
.....more categories 
55 2 

그래서 내가 그것을 어떻게 할 싶은 것입니다 그러나

ID Parent Level 
2 NULL 0 
3 55  2 
7 2  1 
.... 
55 2  1 

, 나는 생각하지만, 내가 잘못 될 수도, 내가 필요로한다는 것입니다 중 내가 마지막 작업을 수행하기 전에 먼저 ParentID에 의해 순서, 또는에 내 쿼리가 잘못 작성되었습니다.

그러나 나는 어떤 오류도 얻지 못하고 있지만 결과를 얻지는 못한다. 나는 이것이 무엇을 얻고 있는지 기대하고있다.

ID Parent Level 
2 NULL 0 
3 55  NULL 
7 2  1 
.... 
55 2  1 

아이디어가 있으십니까?

+1

나는 완벽하게 작동한다고 생각한다. 쿼리를 다시 실행하면 어떻게됩니까? 부모 레벨이 알려지면 레코드 만 업데이트됩니다. 레벨을 가졌을 때이 쿼리를 여러 번 실행해야 할 수도 있습니다. 예를 들어, 3 번 실행 한 후 레코드 # 3이 업데이트 되었습니까? – AgRizzo

+0

얼마나 간단합니다. 나는 단지 한 번 더 실행해야한다고 생각하지만, 마지막 부분 대신에 전체 스크립트를 다시 실행하기 전에 생각합니다. – user2231688

답변

0

질문의 수준은 몇 개입니까? 그들이 3 레벨이라면 이것처럼 할 수있다.

ALTER TABLE categories DROP Level; 
ALTER TABLE categories ADD Level INT NULL; 

UPDATE categories SET Level = 0 WHERE ParentID IS NULL; 
UPDATE categories SET level = 1 where parentID = 2; 
UPDATE categories SET level = 2 where parentID > 2;