Привет ! У меня есть вопрос насчёт дерева NESTED SETS Вот пример дерева: + В моей таблице есть колонка `parent` У меня есть список открытых ветвей .. но он не непрерывный ... тоесть ветвь родитель может быть закрыта. Вот пример : id: (5,3,4,7) - Открытые ветви ... но ветвь родитель 5ой ветви(id = 5) не включена в данный список а значит закрыта(id=2). Мне нужно выбрать конкретные ветви id : (2,3,4) а также их непрерывные ответвления .. тоесть id : (6,7,12,13,14,8,9) но у меня ничего не выходит ... на выходе должны быть id : (2,3,6,7,12,13,14,8,4,9)
не понятны твои термины. с Nested Sets я знаком, с Adjacency List тоже. вот э фак из "открытая ветка"? какой-то колхозный Nested Set, IMHO
извеняюсь , постораюсь обьеснить. у меня в базе хранится дерево сайтов / подсайтов я организовал Tree View на JQuery тоесть можно открывать ветки и смотреть подсайты у сайта ... но если обновить страницу все открытые ветки понятное дело закрываются.. я решил хранить id открытых веток в Cookies .. id: (5,3,4,7) - открытые ветки ... то-есть Id (веток / сайтов) открытых и тем самых занесёных в cookies... теперь я хочу обработать эти id и выбрать их из БД для сохранения Tree View
А при чем тут nested sets и бд тогда, если на jquery всё разворачивается? Куки хранят id открытых в jquery ветвей, осталось их сохранить. Проблема в чем? PS. Как человек формулирует мысли, так и программирует.
не совесем всё так просто .. я уже всё написал и всё работает ... вопрос не в том .. вы меня судите не прочитав вопроса... у меня запрос из БД не оптимизирован .. работает в цикле ... т.к я не знаю как выбрать открытые ветки из БД я конечно благодарен за помощь но прочитайте вопрос пожалуста... PHP берёт из кукисов открытые ветки и выводит на экран уже всё в открытов виде.. но это не дело т.к это работает в цикле .. а я хотел это дело оптимизировать .. мне нужно выбрать запросом закрытые и открытые ветки и вывести всё это дело на экрн как и я написал выше .. вот как этосейчас работает .. примерно .. Код (Text): function print_tree($id = false) { global $wpdb; $ublogs = user_blogs(); //Список ID блогов пользователя $IN = '"' . implode('","', $ublogs) . '"'; if(isset($_COOKIE['table_tree']) && !empty($_COOKIE['table_tree'])) $opened = explode(',',$_COOKIE['table_tree']); else $opened = array(); if(!$id) { $res = $wpdb->get_results('SELECT `left_key`,`right_key`,`blog_id`,`level` FROM `wp_wnm_blogs_tree` WHERE `blog_id` IN ('.$IN.') AND `level` = (SELECT `level` FROM `wp_wnm_blogs_tree` WHERE `blog_id` IN ('.$IN.') ORDER BY `level` LIMIT 1)'); } else { $res = $wpdb->get_results('SELECT `left_key`,`right_key`,`blog_id`,`level` FROM `wp_wnm_blogs_tree` WHERE `parent` = "' . $id . '" ORDER BY `id`'); } foreach($res as $blog) { //Выводим инфо о блоге if(in_array($blog->blog_id,$opened)) print_tree($blog->blog_id); } } Вот так вот примерно всё работает .. но как видите запрос тут в цикле а это не есть гуд .. Вот я и спросил вас уважаемых проффесионалов как выбрать всё.. вместе с открытыми деревьями одним-двумя запросами .. надеюсь зоть на этот раз нормально изложл. Зарание спасибо!
интуиция подсказывает, что с Nested Sets можно одним махом: Код (Text): SELECT d.* FROM tree AS dd INNER JOIN tree AS d ON dd.cleft BETWEEN d.cleft AND d.cright WHERE dd.id IN(:my_id_list) ORDER BY d.cleft ASC