Я пытаюсь создать список книг по категориям по категориям, где каждая книга может принадлежать более чем одной категории, и каждая категория может быть как родительской, так и подкатегорией.
Вот иллюстрация:
JavaScript
Шаблоны JavaScript
Объектно-ориентированный JavaScript
Ajax
Полное руководство Ajax
Пуленепробиваемый Ajax
JQuery
Изучение jQuery 1.3
PHP jQuery Cookbook
PHP
PHP в двух словах
PHP jQuery Cookbook
Ajax
Полное руководство Ajax
Пуленепробиваемый Ajax
–
Как вы видете…
Я разработал таблицы базы данных следующим образом:
BOOK: book_id, book_title CATEGORY: category_id, category_name BOOK_CATEGORY: book_id, category_id CATEGORY_TREE: parent_category_id, child_category_id
Я прочитал много других вопросов / ответов по иерархическим данным в MySQL, но ничего, что может справиться с этим типом «свободной» иерархии.
Кто-нибудь знает, как настроить список таким образом?
Предполагая, что ваши категории не могут образовывать циклы, например a-> b-> c-> a, ваша структура называется направленным ациклическим графом, который нелегко обрабатывать в SQL, но возможно. Googling, который должен дать некоторые результаты, вы также можете начать здесь: http://www.codeproject.com/KB/database/Modeling_DAGs_on_SQL_DBs.aspx
Если ваш набор данных невелик (<10000), вы можете просто получить все данные в 4 SELECT всех запросах и выполнить все вычисления категории / подкатегории в PHP.
Деревья и реляционные базы данных не сочетаются очень хорошо 🙂
Сделайте все это с помощью php, создайте функцию, которую вы включаете в страницы, таким образом, если что-либо изменится, вам не нужно обновлять таблицу, просто файл, который включает эту функцию.
Я бы создал
books (book_id, category_id) categories (category_id, parent_category_id, category_name, category_level)
где category.parent_category_id
может быть NULL
. Если он равен NULL
, тогда category_level
будет 0 (из 1, независимо от того, что вы хотите).