еще раз про деревья

simpex

Новичок
еще раз про деревья

столкнулся с тем что надо сделать каталог разделов магазина

примерно следующий

21 век -> донцова -> Детективы
21 век -> донцова -> стихи
21 век -> донцова -> Проза

детективы
сихи
проза
....
и еще штук 15 типов постоянно повторяются для каждого автора



+ еще есть несколько категорий вроде
классика -> век -> пушкин -> проза
т.е. вложенность 4 и больше....


думал повесить все в таблицу

id name level parent_id
1 21 век 0 0
2 донцова 1 1
3 детективы 2 2


но тогда в таблице категорий будет под 20000 сток, не очень хорошо
может есть решение попроще?
чтобы не повторять весь набор жанров по 1000 раз



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


спасибо
 

Alexandre

PHPПенсионер
строим дерево:
20 век -> стихи -> Ахматова
20 век -> стихи -> Высотский
20 век -> стихи -> Рождественский
20 век -> проза -> Ахматова
20 век -> проза -> Солженицин
...
строим от большой категории к конкретному объекту...
а потом выбираем Донцова,
у нее есть разделы (ветки)
- стихи
- проза
- детективы

в принципе - получается два дерева...
 

simpex

Новичок
т.е. удваиваем дерево?

main_cat - первая таблица как и раньше, 20000 строк

id name level parent_id
1 21 век 0 0
2 донцова 1 1
3 детективы 2 2


2я таблица sub_cat это

id name level parent_id
1 21 век 0 0
2 детективы 1 1
3 донцова 2 2
4 маринина 2 2
5 пупкин 2 2


так?
 

Alexandre

PHPПенсионер
ИМХО: вообщето ищется от частного к общему
21 век -> детективы -> донцова
21 век -> детективы -> маринина
21 век -> стихи -> донцова

если меня интересуют стихи, я лезу 20век, там вижу 10 категорий ( стихи, проза, детективы, фэнтези... ) вхожу в стихи и могу увидеть максимум сотню авторов:
- высоцкий
- рождественский
- окуджава

с другой стороны, если я лезу в 20 век и вижу там 10 000 авторов, я не пойму кто в каком жанре пишет...

По этому надо делать соотношение многие ко многим через дополнительную таблицу
Таблица 1 основное дерево:
id name level parent_id
1 21 век 0 0
2 детективы 1 2
3 стихи 1 2
4 20 век 0 0
5 детективы 1 4
6 стихи 1 4

вторая - это авторы
1 донцова
2 маринина
3 высоцкий
4 окуджава

третья - это связка, какой автор принадлежит к какой категории дерева
autor_id category_id
1 2
1 3
2 2
3 6
4 6

если надо узнать в каких жанрах писала донцова, то это делается простым джоином по третьей и первой таблице, где WHERE autor_id=1<иди донцовой>
 
Сверху