Получение идентификатора папки с помощью как можно меньшего количества операторов SQLPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Получение идентификатора папки с помощью как можно меньшего количества операторов SQL

Сообщение Anonymous »

Рассмотрим таблицу базы данных: папки

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;
}
Примечание. Я использую платформу CodeIgniter, но это не имеет отношения к моему вопросу. Просто для тех, кто задается вопросом, почему я использовал $this->get_folder_id() и $this->db

Подробнее здесь: https://stackoverflow.com/questions/999 ... s-possible
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»