Центрирование иерархического древа

Armageddance

Новичок
Поделитесь соображениями, как можно центрировать иерархическое дерево, которое сейчас выводится в виде тегов списка (Ul, Li). Необходимо вводить отдельное поле в таблицу - уровень вложенности, или же можно расчитывать его как-то в скрипте? На данный момент вывод осуществляется рекурсивной функцией. Таблица имеет вид (id, parent_id, name);
 

С.

Продвинутый новичок
Не центрировать, а повернуть на 90 градусов.
 

tz-lom

Продвинутый новичок
Не очень понятно что ты хочешь - такое визуальное представление или балансировку дерева (перестроение дерева для уменьшения глубины поиска)?
 

tz-lom

Продвинутый новичок
вложенность ты можешь считать циклом/рекурсией
спускаясь по дереву вниз можешь набирать элементы с одинаковой глубиной и выравнивать их в строке , как то так
если нужно чисто визуальное представление - попробуй использовать graphviz , может пригодится
 

Armageddance

Новичок
PHP:
CREATE TABLE IF NOT EXISTS `category` (
  `sid` int(2) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '',
  `parent_id` int(2) DEFAULT '0',
  `level` int(1) NOT NULL,
  PRIMARY KEY (`sid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

INSERT INTO `category` (`sid`, `name`, `parent_id`, `level`) VALUES
(1, 'Общая категория', 0, 0),
(2, 'Парикмахерская', 1, 1),
(3, 'Бассейн', 1, 1),
(4, 'Массаж', 1, 1),
(5, 'Плавание', 3, 2),
(6, 'Аквааэробика', 3, 2);

<? $service_query="SELECT * FROM category ORDER By level, sid ASC";
$service_query=mysqli_query($connector, $service_query);
$service_row = mysqli_fetch_row($service_query);
        $current_level = 0;
          $level_shift=0;
         while($service_data=mysqli_fetch_assoc($service_query)){
         if($service_data["level"]==$current_level) {
           $level_shift++;?>
<div style="position: absolute; top: <?php echo 50+$service_data['level']*200;?>px; left: <?php echo 0+200*$level_shift; ?>px">
<?php echo $service_data["name"];?></div>
        <?php  }
        else {$level_shift=0;?>
<div style="position: absolute; top: <? echo 50+$service_data['level']*200;?>px; left: <?php $level_shift=0; echo "0";?>px"><?php echo $service_data["name"];?></div>
        <?$current_level++;
        } }?>
Набросал вот такой код для вывода из базы дерева.
Все выводится правильно, только вот первый элемент (с level=0) не выводится вообще. Хотя перед циклом специально $current_level зануляю. Что не так?
 
Сверху