Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программируем на PHP - вопросы и ответы.


Рассылка "Программирование на php. Вопросы и ответы"

" PHP сайт - 'это ПРОСТО!"

Как и с помощью чего вы можете сделать самый простой php сайт? Это может сделать даже новичок в php программировании.

Вот бесплатная аудиозаметка "Самый простой PHP сайт". Из неё вы узнаете:
  1. С помощью чего сделать самый простой сайт?
  2. Какие преимущества он вам даёт?


Узнать про Самый простой PHP сайт Немедленно!


PHP - MySql :: 2х мерное дерево...
2008-03-01 21:14 RewerMut
Автор: RewerMut
Тема: 2х мерное дерево...
Добавлено: Сб Мар 01, 2008 6:14 pm (GMT 0)

Добрый вечер всем)))
Прошу подсказки или конкретного ответа!!!!

Есть задача построить 2х мерное дерево:
Я выбрал следующий ход:
SQL - 2е таблицы:
1 вершины (с полями `pid`,`name`);
2 ответвления (с полями `id`,`pid`,`url_name`,`url_rus`,`title`,`body`) - таблица хранит непосредственную информацию (url адрес, заголовок и содержание);
Вот пример SQL запроса:

Код:

--
--Структура таблицы Вершин
--

CREATE TABLE `verschini` (
  `pid` int(11) NOT NULL,
  `name` text NOT NULL,
  PRIMARY KEY  (`pid`),
  FULLTEXT KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `verschini`
--

INSERT INTO `verschini` VALUES (1, 'Вершина первая');
INSERT INTO `verschini` VALUES (2, 'Вершина вторая');

--
--Структура таблицы Ветвей
--

CREATE TABLE `vetvi` (
  `id` int(11) NOT NULL DEFAULT '0',
  `pid` int(11) NOT NULL,
  `url_name` varchar(20) DEFAULT NULL,
  `url_rus` text,
  `title` text,
  `body` text,
  PRIMARY KEY  (`id`),
  FULLTEXT KEY `body` (`body`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы Ветвей
--

INSERT INTO `vetvi` VALUES (1, 1, 'laer1', 'Ответвление 1 Вершина первая', 'Заголовок 1', 'Содержание ');
INSERT INTO `vetvi` VALUES (2, 1, 'laer2', 'Ответвление 2 Вершина первая', 'Заголовок 2', 'Содержание ');
INSERT INTO `vetvi` VALUES (3, 2, 'laer3', 'Ответвление 1 Вершина вторая', 'Заголовок 3', 'Содержание ');
INSERT INTO `vetvi` VALUES (4, 2, 'laer4', 'Ответвление 2 Вершина вторая', 'заголовок 4', 'Содержание ');


Запрос я организовал через объединительную конструкцию

Код:
INNER JOIN


дерево нужно вывести в следующем виде (Вывод дерева ссылок):

Вершина первая
Ответвление 1 Вершина первая
Ответвление 2 Вершина первая

Вершина вторая
Ответвление 1 Вершина вторая
Ответвление 2 Вершина вторая

У меня не получилось вот мой кривой вариант решения:

Код:
function vivod_tree()
{
$sql=mysql_query("SELECT `verschini`.`pid` AS LVL_V, `vetvi`.`pid` LVL_vet, `name`, `id`, `url_rus` FROM `verschini` INNER JOIN `vetvi` ON `verschini`.`pid` = `vetvi`.`pid`;");
//рекурсия_неуверин_но_возможно_поможет...

//типо_надо_замутить_что-то_подобное
     $i=0; //переменная_счётчик(считает_кол-во_итераций)
     while ($tree=mysql_fetch_array($sql))
     {       
               
       
           if($tree["LVL_V"]==$i)
                 {
                   echo $tree["name"]."<br />";
               
                 if ($i-- < $tree["LVL_V"])return $i; //Если итераций меньше на одну (больше\меньше) ключа таблици вершин то запускаем цик заново.
               
               
           foreach($tree AS $key => $val)
                 {
                      if($key==$tree["LVL_vet"])
                         {         
                         if($tree["LVL_V"]==$tree["LVL_vet"]) echo "&nbsp;&nbsp;".$tree["url_rus"]."| id".$tree["id"]."<br />";
                       
                         }
          }
}
$i++;
         
         }
}

vivod_tree();


Заранее Благодарю за помощь!!!
_________________
Мир- это всегда динамика, динамика во всём...

" PHP сайт - 'это ПРОСТО!"

Как и с помощью чего вы можете сделать самый простой php сайт? Это может сделать даже новичок в php программировании.

Вот бесплатная аудиозаметка "Самый простой PHP сайт". Из неё вы узнаете:
  1. С помощью чего сделать самый простой сайт?
  2. Какие преимущества он вам даёт?


Узнать про Самый простой PHP сайт Немедленно!

В избранное