ФорумПрограммированиеPHP для идиотов → Деревья в Mysql или хз

Деревья в Mysql или хз

  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 18:53, спустя 1 минуту 6 секунд


    Это как предлагать на работу ездить на автомобиле (adj. list) и на вертолете (nested), а materialized path - это судно на воздушной подушке
    Спустя 32 сек.
    типа есть такой вариант, только нахуя не понятно, когда есть более удобный транспорт
    не знаю, все удобно и все охуенно
    все умрут, а я изумруд
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 18:56, спустя 3 минуты 1 секунду

    md5, я же про себя говорил, вот тебе видмо нравиться этот вариант, вот и все )
    Спустя 59 сек.

    материализованные пути никто так и не советует..
    а ты его пропиарь сейчас, расскажи какой он удобный и как ты его используешь в своих проектах
    можешь даже написать статью в блоге у себя, всем будет интересно
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 18:58, спустя 1 минуту 59 секунд


    md5, я же про себя говорил, вот тебе видмо нравиться этот вариант, вот и все )
    Спустя 59 сек.

    материализованные пути никто так и не советует..
    а ты его пропиарь сейчас, расскажи какой он удобный и как ты его используешь в своих проектах
    можешь даже написать статью в блоге у себя, всем будет интересно
    спасибо, а можно мне сегодня немного шампанского? :)
    все умрут, а я изумруд
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 22 августа 2009 г. 18:59, спустя 1 минуту 15 секунд

    материализованные пути никто так и не советует..

    кстати удобно и легко, токо кажется, что это решение "в лоб"
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 22 августа 2009 г. 19:07, спустя 7 минут 53 секунды

    http://phpclub.ru/detail/article/db_tree я тупой или это сложно?

    Nested Sets - да это шикарная штука.
    Это и впрямь не просто- не сцы - и к черту тех кто знает как это работает и даже ПОНИМАЕТ это!

    Не комплексуй! Я например эту дрянь не понимал, не понимаю и понимать не собираюсь.
    Оптимизированные выборки древовидных данных и пересчеты ключей - это задача математиков и задрот.
    Я вижу мир программирования видимо иначе - я не хочу разбираться в том, что сделано для меня если этот черный ящик отлажен без моего участия высококвалифицированным программистом, а не сделан банальным сайтоклепателем типа меня, например.

    По опыту программистов руби - могу сказать - что стабильный плагин для работы с Nested Sets появился только через 3-4 года после появления платформы - что говорит о не банальности данной задачи.

    Вот эволюция реализации nested_set на руби:

    Обычный
    nested_set
    http://github.com/rails/acts_as_nested_set/tree/master

    Улучшенный
    better_nested_set
    http://agilewebdevelopment.com/plugins/betternestedset
    http://github.com/chris/better_nested_set/tree/master

    Превосходный
    awesome_nested_set
    http://github.com/collectiveidea/awesome_nested_set/tree/master

    А как толково с ним работать - и вовсе знают совсем не многие. Хотя интерфейсы к нему очень простые.

    move_to_root - переместить узел в корень
    move_to_child_of(node) - сделать узел дочерним к заданному
    move_to_right_of(node) - сделать узел следующим за указанным
    move_to_left_of(node)  - сделать узел предыдущим к указанному
    move_left - поднять вверх
    move_right - опустить вниз
    left_sibling - предыдущий сосед
    right_sibling - следующий сосед
    move_possible?(target) - можно ли переместить к указанному узлу
    ancestors - все родители
    children - все дочерние на 1 уровень (в чистом виде (Возвращает массив) только в консоли)
    children.count.zero?
    children.each { |child| child.id }
    descendants - все дочерние и их дочерние


    Для него даже не существует единой функции отрисовки дерева - мне пришлось писать свой вариант хелпера (функции-помошника для отрисовки дерева в html).

    Если сможешь найти аналог уже готового алгоритма - как здесь:
    http://github.com/collectiveidea/awesome_nested_set/blob/0c2354909ce211909cbde555fd3cf1715b41201e/lib/awesome_nested_set.rb
    То я тебя поздравляю.
    Это кажется должно было быть реализовано в Симфони для PHP.
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • code9

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz 22 августа 2009 г. 19:09, спустя 1 минуту 48 секунд



    http://phpclub.ru/detail/article/db_tree я тупой или это сложно?


    nested sets - это достаточно сложно для человека, который не имел с ним дело, я рекомендую тебе использовать сейчас adjacency list, а если дальше станет интересно или захочется чего-то большего, то изучи nested sets

    http://phpclub.ru/detail/article/db_tree помоему это даже легче,только пока понятия не имею как это вместе с http://dev.e-taller.net/dbtree/ этими классами в моем скрипте использовать… Мне всего то нужно создавать категории и разделы и ссылаться на них их меню.
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 22 августа 2009 г. 19:14, спустя 5 минут 19 секунд

    Кстати руби кодеры шутят, что ждут скорого выхода (соблюдая очередность)

    global_nested_set
    solar_system_nested_set
    galaxy_nested_set
    universal_nested_set

    =)
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 22 августа 2009 г. 19:15, спустя 1 минуту 6 секунд

    Ну создал раздел , в базе выглядит так
    id | title | link
    ————–
    1 | Первая категория | first
    теперь выводим меню типо такого
    $sql = mysql_query("SELECT * FROM categories");
    while ($out = mysql_fetch_array($sql) {
       echo '<li><a href="http:site.ru/categories/'. $out['link'] .'">'. $out['title'] .'</a></li>';
    }
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 19:23, спустя 7 минут 24 секунды

    code9, слушай, по простому - тебе надо хранить ид_родителя и ид_потомка, все! Не может быть что nested sets был проще, он нужен для ускорения выборки, но как доходит дело до перемещения структур по дереву - то это тормоз еще тот.

    id | pid | title
    0 | 0 | Корень
    1 | 0 | Категория 1
    2 | 0 | Категория 2
    3 | 0 | Категория 3
    4 | 2 | Подкатегория 1  - категории 2
    5 | 0 | Категория 4
    6 | 3 | Подкатегория 1 - категории 3
    7 | 3 | Подкатегория 2 - категории 3
    Спустя 159 сек.
    Еще пример накатал:



    id | pid | title
    1 | 0 | Мальчики
    2 | 0 | Девочки
    3 | 1 | Вася Пупкин
    4 | 2 | Маша Дудкина
    5 | 1 | Владиславы
    6 | 5 | Владислав Власов
    7 | 5 | Владислав Борисов

    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 22 августа 2009 г. 19:26, спустя 2 минуты 49 секунд

    ааа ему надо выводить меню древовидное
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 22 августа 2009 г. 19:33, спустя 7 минут 4 секунды

    adw0rd, Владислав Борисов
    должен иметь двух предков)) Борисов и Владиславов)) а еще Имя
  • code9

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz 22 августа 2009 г. 19:33, спустя 28 секунд


    Ну создал раздел , в базе выглядит так
    id | title | link
    ————–
    1 | Первая категория | first
    теперь выводим меню типо такого
    $sql = mysql_query("SELECT * FROM categories");
    while ($out = mysql_fetch_array($sql) {
       echo '<li><a href="http:site.ru/categories/'. $out['link'] .'">'. $out['title'] .'</a></li>';
    }



    Все проясняется,правда очень медленно…Дело в том,что я таблицы связанные между собой еще не делал.
    А куда ссылка ведет? Я думаю нужно создать таблу content которая к примеру содержит статьи…И при переходе по ссылке мне должны выдаваться статьи соответствуюшей категории.И как это осуществить…
  • code9

    Сообщения: 135 Репутация: N Группа: Кто попало

    Spritz 22 августа 2009 г. 19:40, спустя 6 минут 33 секунды

    спасибо всем,пойду писать.Может выйдет че))
  • killich

    Сообщения: 270 Репутация: N Группа: Адекваты

    Spritz 22 августа 2009 г. 22:17, спустя 2 часа 37 минут 5 секунд

    а я вспоминаю как деревья рисовал рекурсивными sql =)
    пиздеЦ! <===== тот редкий случай, когда я ругаюсь матом в сети. Всем запомнить!!! =))))
    Рубист с большой буквы Г. Серый кардинал кулинарного блога open-cook.ru
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 22 августа 2009 г. 22:21, спустя 4 минуты 35 секунд


    а я вспоминаю как деревья рисовал рекурсивными sql =)
    пиздеЦ! <===== тот редкий случай, когда я ругаюсь матом в сети. Всем запомнить!!! =))))

    я заметил что у тебя своеобразный стиль оформления текста постов… типа "<=====" или например ты не цитируешь через
    а выделяешь цитату жирным курсивом
    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!