Распечатать полное дерево транзитивных замыканий - PullRequest
1 голос
/ 30 июня 2011

В нашем онлайн-магазине (PHP / MySQL) для нашей структуры категорий мы используем транзитивную таблицу замыканий (предок, потомок, длина), как описано Биллом Карвином.

Я нахожу это очень гибким и полезным, но не могу понять, как напечатать полное дерево категорий без рекурсии. Это возможно?

Например, я хочу вывод, похожий на:

  • Аудио
    • Портативный
      • MP3
  • Вычислительный
    • Оптические приводы
      • DVD-RW
    • Устройства ввода
      • Беспроводной
        • Клавиатура
  • Бытовая техника
  • Телевизоры
    • LCD
      • широкоэкранный
    • CRT

Опционально ограничение общей глубиной категории.

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

1 Ответ

2 голосов
/ 30 июня 2011

Рекурсия - это самый простой способ сделать это, особенно если это для отображения.

В качестве альтернативы вы можете сделать это из MySQL, следуя советам в этом ответе Как найти всех братьев и сестермой узел и его предки в иерархическом дереве категорий?

...