4
현재 저는 iPhone 용 프로젝트에서 로컬 sqlite 데이터베이스에 저장된 많은 양의 계층 적 데이터에 액세스해야합니다. 보다 일반적인 작업 중 하나는 롤업 상태 필드를 계산하는 것입니다. 지금 당장, 나는 그 항목의 모든 자손 (1에서 n 레벨까지 깊이있을 수 있음)을 재귀함으로써 그렇게하고있다. 그러나 이것은 많은 SQL 호출을 필요로합니다. iPhone에서 각 sqlite 호출을 완료하는 데 약 250ms가 걸리고 결국 처리 시간이 약 7.7 초가됩니다. 누구든지 O (n) 시간보다 적게 이와 같은 일을하는 것에 대한 제안이 있습니까? 문제의 근원은 SQL 호출의 깎아 지른 번호라고 생각합니다. 그래서 그것을 줄이려고합니다.재귀 적으로 sqlite에서 재귀 계산을하는 대신?
MySQL의 페이지에서 제공 한 좀 더 복잡한 SQL 예제 중 일부는 sqlite에서 작동하지 않지만 한 가지 해결책에 동의합니다. 중첩 된 세트에 대해 읽은 한 가지 아이디어는 특정 하위 트리 (매우 복잡한 쿼리 인 것 같습니다) 아래의 모든 리프 노드 (매우 간단한 쿼리)를 찾으려고했습니다. 그 달성 방법에 대한 아이디어가 있습니까? 그러면 모든 재귀가 제거되고 더 많은 쿼리가 아닌 메모리에서 롤업 계산을 수행 할 수 있습니다. –
좋아, 나는 내 대답을 찾았다 고 생각한다. 쿼리는 매우 간단했습니다. 노드 AS nested_category 상위 nested_category AS SELECT FROM node.name, 포인터 용 parent.category_id = 6 + 1 AND parent.lft AND parent.rgt BETWEEN node.lft 감사합니다 이제 885 행의 계층 적 데이터를이 새로운 중첩 형식으로 변환하는 방법을 알아 내야합니다. 그러나 그것은 완전히 다른 이슈입니다. –
차가움. 나는 보통 데이타베이스 사람이 아니다, 나는 1 개가있어 기쁘다. –