Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2010, 08:26   #1
НП...
 
Регистрация: 14.11.2006
Сообщений: 4
Печаль Таблица в виде дерева

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

Есть таблица с полями id - это просто порядковая нумерация строк таблицы, cparent - имя родительской категории, cname - собственно имя самой категории, xkey - просто текстовое поле в этой записи.

Таблица небольшая. Нужно вывести её в виде дерева.

Пример таблицы (в скобках как раз поле xkey):

Top
***level1
******php (code)
******php1 (man)
*********subl (text)
***level2
******delphi (code)

Сначала я делаю простой запрос всех данных
PHP код:
SELECT cparentcnameckey FROM cats ORDER BY cparent 
потом mysql_fetch_array собираю в массив

а дальше ступорюсь. Можно, конечно, вначале найти самый верхний уровень перебором всех значений cparent, чтобы они не встречались в cname. И так по идее дальше для всех cname. Вложенность небольшая, можно условно взять равной 5. Как-то рекурсией это делать? Помогите, пожалуйста, голову уже изломал и, если можно, с конкретным примером кода.

Последний раз редактировалось НП...; 15.06.2010 в 08:29.
НП... вне форума Ответить с цитированием
Старый 15.06.2010, 12:15   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,156
По умолчанию

задача нифига непростая..... решается рекурсией
для верхних элементов cparent должен быть пустым - так и пределите верхний уровень....
использовать в качестве поля по привязке к родитею имя - не айс.... не дай бог решите имя изменить - потеряете всех потомков
ADSoft вне форума Ответить с цитированием
Старый 15.06.2010, 13:58   #3
НП...
 
Регистрация: 14.11.2006
Сообщений: 4
По умолчанию

ну верхний-то уровень проблемы найти нет, а вот как дальше двигаться по массиву?
НП... вне форума Ответить с цитированием
Старый 15.06.2010, 14:04   #4
НП...
 
Регистрация: 14.11.2006
Сообщений: 4
По умолчанию

я изменил запрос на
PHP код:
SELECT cparentcname FROM cats ORDER BY cparent 
теперь всё выводится в виде

level1 php
level1 php1
level2 delphi
php1 subl
top level1
top level2

так вроде кажется более упорядоченным
НП... вне форума Ответить с цитированием
Старый 15.06.2010, 15:12   #5
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Наистандартнейшее построение иерархических деревьев. Это проходят, если не ошибаюсь, на первом году обучения в профильных заведениях.

PHP код:
function tree($pid 'top'$l 0) {
    
$l++;

    
$result=mysql_query("SELECT * FROM cats WHERE `cparent` = '".$pid."' ORDER BY `id`");
    if (
mysql_num_rows($result) > 0) {
        while (
$line mysql_fetch_assoc($result)){
            echo 
str_repeat("***"$l);
            echo 
$line['cname'];
            if (
$line['xkey']) echo " ".$line['xkey'];
            echo 
"<br />\n";
            
tree($line['cname'], $l);
        }
    } else {
        
$l--;
    }
}
tree(); 
З.Ы. Да, конечно, есть варианты построения дерева без использования SQL запросов в рекурсии. Но я не думаю, что автору будет доступна сия сложность логики на данном этапе.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?

Последний раз редактировалось Johnatan; 15.06.2010 в 15:16.
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBGridEh. представить данные из таблицы в виде дерева yellow87 Компоненты Delphi 0 19.02.2010 03:56
Разложение введенного слова в виде дерева на дельфи Gauss Общие вопросы Delphi 7 23.03.2008 21:57
Меню в виде дерева pu4koff JavaScript, Ajax 7 16.10.2007 11:24