Мне тут мелкософтовские SQLщики предложиле ввести иерархическое ID для всего что имеет вложения друг в друга.
В нашем случае это категории, в материалах это указание на категорию. В дальнейшем думаю можно так же использовать для древовидных коментов.
принцип прост.
Допустим у нас есть такая структура категорий:
Первый уровень
Второй уровень
Третий уровень
Первый уровень
Второй уровень
Соответственно у каждой из этих категорий есть некий ID и parent_id
ID формируются как и обычно
1 Первый уровень
2 Второй уровень
3 Третий уровень
4 Первый уровень
5 Второй уровень
а вот paren_id лучше всего уже формировать иерархическим:
1 Первый уровень 0
2 Второй уровень 1
3 Третий уровень 1.2
4 Первый уровень 0
5 Второй уровень 4
соответственно таким образом можно формировать сколь угодно глубокую вложенность. В базе всегда будет понятно что откуда вытекает и куда стремится.
Есть предположение что проще будет выбирать все это из базы (в плоть до подсчета сколько вложенных категорий.)
Да, кстати условие для выборки сказали будет где то вот такое where hnum like '1.%' , но это в мелкосовтовском.
Таким же образом формируем ссылку из таблицы материала:
если материал входит в первый уровень категории то category_id == ID категории
если во второй и глубже то category_id == parent_id + ID (например для третьего уровня будет выглядеть как 1.2.3)
таким образом выборки будут очень простыми. если надо выбрать все материалы из какой то категории и категорий глубже нее то просто ищем включение ID материнской категории.
я правда не очень знаю можно ли такое реализовать в MySQL или нет.
Кто что может сказать по этому аповоду?
p.s. если не в той ветке форума то сори...
Все мое имхо...
------
Не флуди и не да зафлудим будешь!
ну вообще идея как бы нормальная. Правда я хз как это с точки зрения нормализации БД. Например, в самих категориях, еще понятно зачем это. Но в материале это точно лишнее, так как при запросе материала, мы все равно получаем сразу и информацию о его категории. То есть это как бы дублирование будет левое.
Хотелось бы конечно увидеть результаты каких то тестов такого подхода. С точки зрения удобства, он хорош. Но вот производительность пострадает я думаю. Это если и делать, то не parent_id, а завести отдельное поле с перечнем родительских категорий. Ну и юзать их, при необходимости. Так как id должно быть id. Это как бы правила хорошего тона)
как раз в материалах это то что надо.
сейчас ты думаешь как выводить в материнских категориях материал всех дочерних категорий, а там ты будешь искать просто ID матери.
точно так же с подсчетом материалов в каждой категории.
с тестами как раз плохо обстоит дело... сейчас времени ну совсем мало =(
Drunya пишет:
Так как id должно быть id
так, я ID нигде не трогал, я трогаю только ссылки. parent_id это уже не id, а ссылка на мать. Ничего страшного не будет если эта ссылка будет иерархической.
Точно так же в материалах я не трогал их ID, а трогал только ссылку на категорию в которую добавлен материал. И опять же не вижу ничего страшного если ссылка будет полной и иерархической.
Все мое имхо...
------
Не флуди и не да зафлудим будешь!