Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дерево вложенных записей 
:(
    Опции темы
maxipub
Дата 15.4.2010, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: нет
Всего: 1



есть БД
id ----- parent_id ----- data
1 ........ 0 ................... blabla_1
2 ........ 0 ................... blabla_2
3 ........ 0 ................... blabla_3
4 ........ 1 ................... blabla_4
5 ........ 2 ................... blabla_5
6 ........ 3 ................... blabla_6
7 ........ 1 ................... blabla_7
8 ........ 1 ................... blabla_8
9 ........ 4 ................... blabla_9

нужно выбрать и сформировать данные, чтоб они выглядели вот так:

*1 blabla_1
**4 blabla_4
***9 blabla_9
**7 blabla_7
**8 blabla_8

*2 blabla_2
**5 blabla_5

*3 blabla_3
**6 blabla_6

думаю, суть ясна.
единственное не знаю, это выборку так организовывать надо или средствами пхп формировать данные (как?)
просьба помочь smile 
PM MAIL   Вверх
MoLeX
Дата 15.4.2010, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



maxipub, более красиво использовать Nested Sets


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
maxipub
Дата 15.4.2010, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: нет
Всего: 1



MoLeX, благодарю, интересная библиотека, но я не очень люблю сторонние библиотеки, уж очень они громоздки из-за своей универсальности. К тому же мне придется тогда переделывать структуру не малых таблиц, обновлять их, обновлять скрипты...

Так что хотелось бы получить именно самостоятельное решение, пусть даже не самое оптимальное, там данные обновляются редко - все равно буду кэшировать. Просто не хотелось бы решать задачу "в лоб", должен же быть более красивый способ. smile
PM MAIL   Вверх
Noviy
Дата 18.4.2010, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Вот набросал, думаю идея ясна. Формируем многомерный массив и рекурсивно перебираем все элементы, начиная с родительских.
Код

 function show_tree() {
      $get_info = mysql_query("SELECT * FROM tree");
       while($res_info = mysql_fetch_assoc($get_info)) {
            $tree[$res_info['pid']][$res_info['id']] = $res_info['name'];
       }
       show($tree, $pid=0);
}

 function show($tree, $pid=0) {

     echo "<ul type='square'>";

     foreach ($tree as $id => $value) {

         if($pid != $id) continue;

         foreach ($value as $key2 => $value2) {

           echo "<li>{$value2}";

           if(isset($key2)) {

               show($tree, $key2);

           }

         }


     }

     echo "</ul>";

}



PM MAIL ICQ   Вверх
SickFxck
Дата 19.4.2010, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: нет
Всего: 1



Цитата(maxipub @  15.4.2010,  09:23 Найти цитируемый пост)
MoLeX, благодарю, интересная библиотека, но я не очень люблю сторонние библиотеки, уж очень они громоздки из-за своей универсальности. К тому же мне придется тогда переделывать структуру не малых таблиц, обновлять их, обновлять скрипты...

Это метод хранения деревьев, а не библиотека. Он позвляет сделать выборку дерева (поддерева) одним запросом. Тот метод, который ты описал в первом посте (adjacency list) позволяет сделать выборку дерева (или поддерева) только рекурсивным способом.
PM MAIL   Вверх
maxipub
Дата 20.4.2010, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: нет
Всего: 1



Noviy, tnx, я через рекурсию и сделал, только иначе, без массива и функция отличается. Было просто интересно, можно ли решить данную задачу другим путем.

SickFxck, Nested Sets - это метод хранения деревьев? Ясно. Как бы там ни было, переделывать БД в моем случае смысла не вижу.

Это сообщение отредактировал(а) maxipub - 20.4.2010, 10:09
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.