在儘可能少的SQL語句的文件夾ID考慮數據庫的表:文件夾獲取儘可能
folders id parent_id name 1 0 a 2 1 b 3 2 c
「B」是「A」中的文件夾,因此它的PARENT_ID是「A」的ID。
parent_id爲0的文件夾僅表示它位於根文件夾中。
我在PHP,可以幫助我得到這個我感興趣的路徑的ID寫了一個遞歸函數
例如:
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)
問題:對於在每個文件夾路徑,我不得不向SQL Server查詢數據庫服務器。
問題:如果路徑是'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框架,但這與我的問題無關。只是人們想知道爲什麼我用$這個 - > get_folder_id()和$這個 - >分貝
什麼是文件夾的最大深度? – safarov 2012-04-03 09:56:22
沒有最大深度。它的設計方式使您可以儘可能多地嵌套文件夾。 – wyred 2012-04-03 09:59:21
您是否需要路徑中每個文件夾的每個ID? – cloakedninjas 2012-04-03 10:15:53