한 적은 수의 SQL 문에서 폴더 ID는 데이터베이스 테이블을 고려 방법 : 폴더가능
folders id parent_id name 1 0 a 2 1 b 3 2 c
는 'B'는 'A'내부 폴더이며, 따라서 그것은 PARENT_ID '가'의 ID입니다입니다.
parent_id가 0 인 폴더는 단순히 루트 폴더에 있음을 나타냅니다.
:.
echo get_folder_id('a/b/c'); // 3 (3 SQL queries)
echo get_folder_id('a'); // 1 (1 SQL query)
echo get_folder_id('a/b'); // 2 (2 SQL queries)
echo get_folder_id('a/c'); // false (2 SQL queries)
문제를 다음의 각 폴더에 대해 경로, 나는 DB 서버에 SQL 쿼리를 만들어야했다.
질문 : 경로가 'a/b/c'인 경우 쿼리 수를 줄일 수 있습니까?
다음은 현재 참고할 수있는 해결책입니다.
function get_folder_id($path, $parent_id=0) {
$path = explode('/', $path);
$id = 0;
//if there's only 1 folder in the path, query the database for the ID
if (count($path) == 1) {
$rs = $this->db->select('id')
->from('folders')
->where('name', $path[0])
->where('parent_id', $parent_id)
->limit(1)
->get();
if ($rs->num_rows() == 0) return FALSE;
$result = $rs->row_array();
return $result['id'];
}
foreach($path AS $i=>$p) {
if ($i==0 && $p=='') continue; //if a path starts with/move on to the next item
$id = $this->get_folder_id($p, $id);
}
return $id;
}
참고 : CodeIgniter 프레임 워크를 사용하고 있지만 이것은 내 질문과 관련이 없습니다. 그냥 내가 $ this-을 사용하는 이유는 사람들이> get_folder_id() 및 궁금 위해 $ this-> DB 문제에 대한 매우 간단한 해결책이있다
폴더의 최대 깊이는 얼마입니까? – safarov
최대 깊이가 없습니다. 폴더를 원하는만큼 중첩시킬 수있는 방식으로 설계되었습니다. – wyred
경로의 각 폴더마다 각 ID가 필요합니까? – cloakedninjas