folders
id родительский_id имя
1 0 a
2 1 b
3 2 c
'b' — это папка внутри 'a', и, следовательно, ее родительский_id - это идентификатор 'a'.
Папки с a Parent_id, равный 0, просто означает, что он находится в корневой папке.
Я написал рекурсивную функцию на 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)
Проблема: для каждой папки в пути мне пришлось выполнить SQL-запрос к серверу БД.
Вопрос: есть ли способ уменьшить количество запросов, если путь — «a/b/c»?
[/b]
Вот мое текущее рабочее решение для справки.
Код: Выделить всё
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;
}
Подробнее здесь: https://stackoverflow.com/questions/999 ... s-possible
Мобильная версия