Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка открытых ветвей из NESTED SETS 
:(
    Опции темы
DDeath
Дата 13.4.2012, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.7.2008

Репутация: нет
Всего: нет



Привет ! У меня есть вопрос насчёт дерева NESTED SETS

Вот пример дерева:

user posted image
+ В моей таблице есть колонка `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)

Это сообщение отредактировал(а) DDeath - 13.4.2012, 15:08
PM MAIL   Вверх
DDeath
Дата 13.4.2012, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.7.2008

Репутация: нет
Всего: нет



у меня в базе хранится дерево сайтов / подсайтов 

я организовал Tree View на JQuery тоесть можно открывать ветки и смотреть подсайты у сайта ... 
но если обновить страницу все открытые ветки понятное дело закрываются.. 
я решил хранить id открытых веток в Cookies .. id: (5,3,4,7) - открытые ветки ... то-есть Id (веток / сайтов) открытых и тем самых занесёных в cookies... теперь я хочу обработать эти id и выбрать их из БД для сохранения Tree View

Это сообщение отредактировал(а) DDeath - 13.4.2012, 16:31
PM MAIL   Вверх
DDeath
Дата 13.4.2012, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.7.2008

Репутация: нет
Всего: нет



PHP берёт из кукисов открытые ветки и выводит на экран уже всё в открытов виде..
но это не дело т.к это работает в цикле .. а я хотел это дело оптимизировать .. 
мне нужно выбрать запросом закрытые и открытые ветки и вывести всё это дело на экрн как и я написал выше ..

вот как этосейчас работает .. примерно .. 

Код

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);
    }
}
 

Вот так вот примерно всё работает .. но как видите запрос тут в цикле а это не есть гуд .. 
 Как выбрать всё.. вместе с открытыми ветками одним-двумя запросами .. ?


Зарание спасибо!
PM MAIL   Вверх
skyboy
Дата 13.4.2012, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



раз. разворачивать на стороне клиента. ну, правда, все равно дерево строится при помощи jQuery на клиенте, разве нет?
два. не надо хранить все открытые. в твоем примере нет смысла хранить и 3, и 7. все равно для "открытия" 7 придется "открыть" 3.
PM MAIL   Вверх
DDeath
Дата 14.4.2012, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.7.2008

Репутация: нет
Всего: нет



1.Дерево строится с помощью php а jquery всего-лишь посредник т.к ветки подгружаются Ajax'ом
2.Вы не сосвсем правы .. скажем если 5ая ветка будет открыта а 2ая закрыта .. то по вашей логике скрипт на сильно откроет 2ую.
а должно быть по другому .. 2ая будет закрыта.. но если пользователь откроет 2ую ветку .. 5ая уже будет открыта .. 
так и с 3 и 7... есл не хранить 3ойку то скипт посчитает что 3ия ветка закрыта и не станет открывать .. 
а будет ждать пока пользователь откроет что-бы открыть также 7ую


п.с у меня уже всё есть всё работает вот только это всё не оптимизировано=\\ 

Это сообщение отредактировал(а) DDeath - 14.4.2012, 11:27
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.