Хранение деревьев в базе

Tofik

Новичок
Хранение деревьев в базе

Столкнулся с этой проблемой до того, как узнал о Nested Sets, поэтому у меня есть проекты, использующие "моё" хранение. Вот думаю, стоит переписывать или сойдёт.
Вкратце моя логика:
В базе есть поле, которое содержит инфу о пути (напр. /razdel/podrazdel/). Чтобы отобразить всю ветку использую следующюю функцию:
PHP:
function print_block($path="/")
 {
  $block=get_blocks($path);
  echo "<ul>";
  for($i=1;$i<=count($block);$i++)
   {
   echo "<li><a href=\"?path=".$block[$i]['path']."\">".$block[$i]['title']."</a></li>";
   print_block($block[$i]['path']);
   echo "</ul>";
   }
 }
где get_blocks:
PHP:
function get_blocks($path)
 {
 $query=mysql_query("SELECT * FROM `site` WHERE path REGEXP '^".$path."([^/][a-z0-9_-]+)/$' ORDER BY `id` ASC");
 for($i=1;$row=mysql_fetch_row($query);$i++)
  {
  $res[$i]['path']=$row[1];
  $res[$i]['title']=$row[2];
  }
 return $res;
 }
Чтобы по сто раз не выполнять скрипт, который генерирует навигацию для сайта, я сделал запись навигации в файл каждый раз, когда админ меняет структуру сайта. И когда юзер обращается к странице - навигация выводится из файла, не обращаясь к базе.

Теперь очень удобно перемещать разделы. Пример работы можно посмотреть на www.zavod.by/test/admin/
 

Кром

Новичок
Если это реклама своего нетленного кода, то для этого есть форум offtopic.
 
Сверху