2009-07-16 2 views
2
CREATE TABLE item (link MEDIUMINT UNSIGNED PRIMARY KEY NOT NULL, 
        title TEXT NOT NULL, 
        rank INT UNSIGNED NOT NULL AUTO_INCREMENT, 
        notes TEXT 
        ) ENGINE = INNODB; 

구현에 문제가 있습니다. 등급은 언제든지 변경할 수있는 사용자 등급이며 언제든지 항목을 추가하거나 제거 할 수 있습니다. 문제는 순위가 고유하고 항상 1과 n 사이에서 정렬되도록하려는 것입니다 (n은 테이블의 행 수임). IE : 사용자가 항목 5의 순위를 2로 변경하면 이전 순위 2 항목은 순위 3이되어야하고 이전 순위 3은 순위 4로 이동하고 이전 순위 4는 새로운 순위 5가됩니다. 마찬가지로 삭제 및 생성 크거나 작은 순위의 모든 항목은 작업 중 하나 또는 하나를 연속적으로 캐스케이드해야합니다.순차적으로 번호가 매겨진 "상위 n"목록을 유지하는 MySQL 메소드

쉽게 구현할 수있는 패턴이나 기법이 있습니까? 어떤 도움

감사합니다,

마이클

답변

0
당신은 링크 된 목록에서 항목을 유지할 수 있습니다

: 항목을 이동

SELECT lv.* 
FROM (
     SELECT @r AS _parent, 
       @r := (
       SELECT id 
       FROM t_list 
       WHERE parent = _parent 
       ) AS id 
     FROM (
       SELECT @r := 0 
       ) vars, 
       t_list 
     ) li 
JOIN t_list lv 
ON  lv.id = li.id 

이 같은

id parent title notes 

1 0  Title 1 Note 1 
2 1  Title 2 Note 2 
3 2  Title 3 Note 3 
4 3  Title 4 Note 4 

및 쿼리 (또는 심지어 항목 블록)이 디자인에 걸릴하지만 3 개의 UPDATE 작업 (당신은 차 귀하가 이사하는 품목의 부모, 귀하가 이사 할 품목 및 이사하려는 품목의 부모에게 통보하십시오).

하면 자세한 내용은 내 블로그에서이 문서를 참조하십시오

관련 문제