としていくつかの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のフォルダは、単にルートフォルダにあることを意味します。
私は私が私が興味パスのIDを取得することができますPHPの再帰関数を書いた
たとえば:。
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 - >デシベルあなたの問題のために非常に簡単な解決策はあり
フォルダの最大深度はどのくらいですか? – safarov
最大の深さはありません。これは、あなたが望むだけフォルダを入れ子にすることができるように設計されています。 – wyred
パス内の各フォルダに各IDが必要ですか? – cloakedninjas