Привет! Есть такая задача: - Есть обьекты, которые можно хранить так ID, name, info - Есть несколько корневых категорий, каждый объект принадлежит какой-то одной из этих категорий - И вот самае главное , есть промежуточные категории Первое что приходит в голову добавить поле parentID, который у корневых будет NULL, у промежуточных категорий parentID указывает на категорию уровнем выше и так до корневого, у объектов parentID указывает либо на промежуточную, либо на корневую категорию. (Тут нужно еще обдумать, и возможно добавить rootID для указания на корневую категорию - возможно пригодится ) Нужно выводить на одной странице все записи выбранной «корневой» категории так: Код (Text): Корневая категория1 Категория1 ПодКатегория1 Объект1 Объект2 ПодКатегория2 Объект3 Объект4 Сортировать по имени категорий и объектов. Так вот подскажите готовые решения, может есть исходники какие? Как организовать структуру БД? Каким запросом получать массив в PHP чтобы все было отсортировано для удобного вывода? Может конечно много прошу
Вот нашел еще такое предложение: Структура бд: Код (Text): items ------------------------ id | title | description ------------------------ categoryes ------------ id | name ------------ items_categoryes ------------------------ item_id | cat_id ------------------------ Вообщем, мне главное это вывод, подскажите какую структуру БД избрать и как составить запрос!!! )
Создать таблицу вида: id : pid : fullpath Затем создать функцию (лучше триггер, если поддерживается) которая при добавлении новой ветки автоматом добавляла поле fullpath (грубо говоря перемещалась вверх по дереву от текущего элемента (while pid is not null например). В итоге в этом поле получаем что-то типа /1/4/32... потом выводи сортируя оп этому полю.
@Ruzzz гуглите общую тему tree + SQL, hierarchical + data + database итд. Предыдущий подход Megamozg называется materialized path и является одним из способом. Другой - классический - nested set. То, что описали вы - adjacency list. Короче, тема обширная. Если ваша структура очень часто читается и очень редко изменяется - пробуйте nested set, он для такого создан (один запрос итд.).