Деревья php + mysql

Практически каждому программисту приходится сталкиваться с древовидной структурой.

Дано: php + mysql.
Все элементы, которые входят в древовидную структуру хранятся в одной таблице базы данных.
Найти: способ хранения и представления древовидной структуры.

  1. Простейший вариант состоит в том, что все “ветки” дерева имеют дополнительное поле “идентификатор родителя”, используя который и можно построить всё дерево. Если нет необходимости строить всё дерево, а достаточно просматривать потомков следующего уровня некоторого родителя - то такой способ организации дерева, на мой взгляд, идеален. Если же требуется строить дерево целиком, то придется использовать рекурсивную процедуру - или в php или в mysql (при условии, что максимальная “глубина  дерева” заранее определена, можно, конечно, обойтись одним составным, в котором одна таблица присоединяется сама к себе… Но это уже больше похоже на извращения..).
    Можно, конечно, обойтись одним запросом (что-то вроде “select * from tree”, а данные разбирть уже в php примерно так:
      while($row = mysql_fetch_assoc($res)){
      $tree[$row['pid']][$row['id']] = $row;
      }
    Плюсы: простота организации данных.
    Минусы: при большом количестве “веток” количество запросов возрастает…
  2. Nested sets или вложенные множества. Способ организации дерева, при котором дерево обходится, к примеру слева направо, и все вершины нумеруются дважды.
    Нумерация элементов при организации дерева методом Nested Sets
    Плюсы: одним запросом можно выбрать всех потомков, отстоящих по дереву на заданное количество уровней, всех родителей.. да вообще много чего можно. Где-то встречал уже готовый класс для работы с ”Nested sets” -  деревьями.

Метки: , , ,

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Комментарии (11) к записи “Деревья php + mysql”

  1. su deposu сообщает :

    встречал уже готовый класс для работы с ”Nested sets” - деревьями.su deposu
    kartaldepo.com | not found

  2. su deposu сообщает :

    su deposu файл к себе на сервер, получить ключ API и вставить несколько строчек кода в страницу, где планируется добавить
    sudeposu.org {spam_detected}

  3. su deposu сообщает :

    и вложенные множества. Способ организации дерева, при котором дерево обходится, к примеру слева направо, и все вершины нумеруются дважды.
    {spam_detected} kartalplast.com

  4. su deposu сообщает :

    обых преимуществ у «Фейсбука» нет: многие виджеты комментариев уже поддерживают Facebook Connect. При этом они лишены недостатков Comment Box, главный из которых — невозможность экспортировать комментарии.
    {spam_detected} kartaldepo.com

  5. konteyner сообщает :

    это ваша работа? Что вы здесь делаете?

    kartalkonteyner.com
    kartalkonteyner.com
    {spam_detected}

  6. prefabrik сообщает :

    И ещё кто решился сестъ,а потом разочарования-естъ такая тенденция-чем больше вес тем легче скидыватъ.Терпение-и вес будет взят,а худеть надо,это ведь ещё для здоровъе,с годами у полных людей куча болячек нарастает-отдышка,давление,сердце,варикоз,пусть это будет в старости ,но не в 40.

    prefabrik.org
    prefabrik.org
    {spam_detected}

  7. hesvinc сообщает :

    thanks

  8. haberler сообщает :

    х людей куча болячек нарастает-отдышка,давление,сердце,варикоз,пусть это будет в старости ,но не в 40.

  9. samsun сообщает :

    Терпение-и вес будет взят,а худеть надо,это ведь ещё для здоровъе,с годами у полных людей куча болячек нарастает-отдышка,давление,сердце,варикоз,пусть
    {spam_detected}

  10. samsun сообщает :

    При этом они лишены недостатков Comment Box, главный из которых — невозможность экспортировать комментарии.

  11. guzel sozler сообщает :

    и пришлет его для всеобщего пользования, то, думаю, буду рад не только я.
    guzelsozlerrehberi.com
    {spam_detected}

Добавить комментарий