![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос скорее алгоритмический, но... [D7]
DmitryNekl © (2005-09-30 01:39:00)Здравствуйте, мастера! Надеюсь на Вашу помощь.
Есть таблица cat, хранящая дерево (для определенности - каталог товаров): cat_id, cat_name, cat_pid (cat_pid - cat_id родителя). Например:
дерево
0
1 2
3 4 5 6
описывается таблицей
0, "0", null
1, "1", 0
2, "2", 0
3, "3", 1
4, "4", 1
5, "5", 2
6, "6", 2
Есть также таблица goods с товарами: id, name, cat_id. Пусть там содержатся значения:
1, Товар_1, 3
2, Товар_2, 3
Нужно отобрать только такие записи из таблицы cat, которые на конечных узлах поддерева содержат товары (т.е. выбросить все узлы, которые сами не содержатся в поле goods_id и ни один из потомков их тоже не содержится). В нашем примере нужно отобрать строки с cat_id=0, 1, 3
Вот как это сделать - мозгов не хватает.
Заранее спасибо.
DmitryNekl (2005-09-30 09:58:00) [1]Требование не противоречит условию, поскольку содержатся потомки узлов 0 и 1. Условие можно переформулировать: в таблице goods должен содержаться либо сам узел, либо хотя бы один из его потомков.
ЮЮ (2005-09-30 03:30:00) [2]>В нашем примере нужно отобрать строки с cat_id=0, 1, 3
>1, Товар_1, 3
>которые сами не содержатся в поле goods_id
требование противоречит условию