PHP/MySQL의 클로저 테이블을 사용하여 특히 Codeigniter를 사용하여 건물을 짓고있는 어플리케이션에 대해 머리를 쓰려고합니다. 각 영역에는 여러 개의 영역이있을 수 있습니다. 위치, 부서 등PHP/MySQL을 사용하여 클로저 테이블에 삽입하기
나는 어떻게 작동 하는지를 알기 위해 http://www.slideshare.net/billkarwin/models-for-hierarchical-data을 사용했다.
나는 데이터를 액세스하는 데 도움이되도록 https://gist.github.com/dazld/2174233을 사용하고 있습니다. 데이터를 액세스 할 수 있도록 도와 주며, 필요한만큼 데이터를 가져 오는 방법을 적용했습니다. 이는 모두 좋습니다.
하지만 이제 데이터를 삽입하려고하는데 주변을 둘러 볼 수 없습니다. 그래서 위의 스크립트에서 추가 방법을 적용했지만, 나는 그것을 이해하지 않고, 나는 그것이 지역 테이블을 Heres
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| area_id | int(11) | NO | PRI | NULL | auto_increment |
| area_title | varchar(40) | NO | | NULL | |
| area_name | varchar(40) | NO | | NULL | |
| org_id | int(11) | NO | | NULL | |
+------------+-------------+------+-----+---------+----------------+
에게 Heres는
area_hierarchy 테이블을 동작하지 않습니다
무슨 일이 $입니다, 그래서 특별히public function add($node_id, $target_id) {
$sql = 'SELECT ancestor, '.$node_id.', lvl+1
FROM area_hierarchy
WHERE descendant = '.$target_id.'
UNION
SELECT '.$node_id.','.$node_id.',0';
$query = 'INSERT INTO area_hierarchy (ancestor, descendant,lvl) ('.$sql.')';
$result = $this->db->query($query);
return $result;
}
:
+------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ancestor | int(11) | NO | | NULL | |
| descendant | int(11) | NO | | NULL | |
| lvl | int(11) | NO | | NULL | |
+------------+---------+------+-----+---------+----------------+
는 Heres는 방법 나는 항목을 추가하는 데 사용하려고 해요 node_id 및 $ target_id.
lvl + 1은 무엇입니까?
그래서 새로운 최상위 영역을 추가하면이 데이터에는 어떤 데이터가 전달됩니까?
질의는 실패하고 area
테이블에서 area_id
열의 값 것이다 UNION
노드 ID는 추가 할 새 노드 (하위)이며 대상 ID는 상위 (상위) 노드입니다. 노동 조합은 자기 기준을 다루어야한다. 자기 기준은 언제나 종결되어야한다. B 아래에 D를 추가하려면 B의 모든 조상을 선택하고 D에 대한 관계를 만들어야합니다. 또한 D = D에 대해 자체 수준을 0으로 설정해야합니다. –
예를 들어, 10 개의 영역, 1,2,3,4,5가 있고 이들이 동일한 기본 키를 가지고 있다고 가정 해보십시오. 그들은 모두 루트 레벨에 존재해야하며, 먼저 그 영역을 추가하면, 각 노드에 대해'add ($ areaId) '를 호출합니다. 그런 다음 6,7,8이 3의 자식이되기를 원합니다. 그런 다음 각 영역에 대해 add ($ areaId, 3)를 호출합니다. 마지막으로, 9와 10이 8의 자식이되기를 원합니다. 우리는'add ($ areaId, 8)'를 호출합니다. 쿼리가 실패하거나 예상대로 작동하지 않는 이유에 대한 도움이 필요한 경우 오류 및 예상 결과를 제공해야합니다. –
감사합니다. 좋은 설명입니다. 나는 멀리 가서 실험을한다. – frobak