Родители - категории в Mysql.

index

Super Moderator
Имам таблица
id | parent id | name


И примерно имам

1 / / Зеленчуци
2 / 1 / Кореноплодни
3 / 1 / Тревисти
4 / / Плодове
5 / 4 / Цитроси
6 /5 / Ананас
7 /5 / Мандарини
8 /5 / Лимон



ID e аутоинкрейсмант , парент ид се води от ИД ако има родител.
Как мога да я направя заяката , че резултата ми да е :

Зеленчуци
- Кореноплодни
- тревисти
Плодове
- Цитроси
- - Ананас
- - Мандарини
- - Лимон


??
Категории с под-категории ощо взето.
 
Това, което използваш, се нарича Adjacency list. На пръв поглед, модела е лесен и удобен за използване, реално обаче създава доста проблеми, особено, когато имаш много йерархични нива. Дори не можеш да го управляваш правилно, ако не си в транзакция.

За да изкараш цялото дърво с една заявка, вероятно трябва да си направиш твоя рекурсивна съхранена функция. ДОПЛЪНЕНИЕ: Това обаче, би било сериозен недостатък и би съдзавало проблеми от страна на бързодействието. Може би по-добрия вариант е да показваш на потребителите, всяко ниво по отделно - първо само parents, после на база избрания parent, показваш (през ajax) неговите директни child nodes и т.н.

По-удачния вариант се нарича Nested sets. Позволява много по-гъвкаво управление на дървото, отново се използват stored routines. Имаше една полезна статия в mysql.com но не мога да я открия. Все пак виж тези линкове:

http://en.wikipedia.org/wiki/Nested_set_model

http://explainextended.com/2009/09/29/adjacency-list-vs-nested-sets-mysql/

Един PEAR пакет, но не съм го ползвал:
http://pear.php.net/package/DB_NestedSet/docs

Изключително полезна книга по въпроса: Joe Celko's TREES AND HIERARCHIES IN SQL FOR SMARTIES
 

Back
Горе