Главный Каталог Статей РФ
85991 авторов, размещено 47108 статей, сейчас на сайте пользователей: 170 Статистика
Аватар slayer

Построение дерева средствами MySQL

Категория:  Интернет  | Автор:  slayer | Опубликовано: 19.04.2008

В Интернете можно найти много примеров построения деревьев в различных связках PHP и MySQL, не будем обсуждать качество выполнения поставленных задач. Бытует такая присказка - «Чем разбираться в коде другого человека, лучше написать самому». Вот и я решил написать код, но использовать целиком для построения и сортировки дерева только средства MySQL. Сразу оговорюсь в представленном варианте дерево трех уровней без претензии на его уникальность.

Опишем ситуацию:

Есть таблица categories, содержащая следующие поля:
id (код)
id_group (код верхней группы)
name (наименование)
Необходимо с помощью запроса построить отсортированную таблицу, в которой присутствуют исходные поля таблицы и такие как:
level (уровень)
veight (вес, количество узлов или листьев подчиненных текущему узлу, буду использовать для отображения дерева)
Для сортировки нам потребовались еще и дополнительные поля:
top_group (код узла первого)
sub_group (код узла второго уровня)
Запрос развернутого и отсортированного дерева по наименованию:
select t_top.id, t_top.id_group, t_top.name, t_top.level,
       IF(t_top.level=1, t_top.id,
         IF(t_top.level=2,t_top.id_group,
           (SELECT c_.`id_group` from categories c_ where c_.`id`=t_top.id_group)
         )
       ) as top_group,
       if(t_top.level=1, 0,
         IF(t_top.level=2,t_top.id, t_top.id_group)
       ) as sub_group,
       (select count(*) from `categories` where id_group=t_top.id) as veight
From
/* В данной части просто получаем уровни */
(
select c.id, c.id_group, c.name, 1 as level from categories c where c.id_group=0
UNION ALL
select cc.id, cc.id_group, cc.name, 2 as level from categories cc
where cc.id_group in ( select c.id  from categories c where c.id_group=0 order by c.name)
UNION ALL
select ccc.id, ccc.id_group, ccc.name, 3 as level from categories ccc
where ccc.id not in ( select c.id  from categories c where c.id_group=0 order by c.name)
      and
      ccc.id not in ( select cc.id from categories cc   where cc.id_group in
 ( select c.id  from categories c where c.id_group=0 order by c.name))
) t_top
order by  top_group,sub_group, level,name
Для построения свернутого дерева, по каким либо узлам не составит труда вставить несколько условий.


Источник http://soft-art.ru
Комментарии
К этой статье пока нет комментариев. Станьте первым! У нас гости не могут комментировать статьи. Пожалуйста авторизуйтесь или зарегистрируйтесь, чтобы прокомментировать.
Интересные статьи по теме
Аватар AnemoN
Накрутка лайков и подписчиков ВКонтакте Есть несколько хитрых и не очень методов, которые используются для т.н. "накрутки лайков".О заслуживающих внимания пойдет речь в этой статье....
Категория: Интернет | Автор: AnemoN | Добавлено: 17.02.2013
Аватар Jetti
Буксы — что это такое и как правильно выбрать букс для заработка Из-за коронавируса, "блуждающего" по всему миру вот уже второй год, у многих людей появилось огромное количество свободного времени. Одни стали тратить это время на хобби, другие — читать книги и смот...
Категория: Интернет | Автор: Jetti | Добавлено: 20.07.2021
Аватар Lizetta
Сколько времени уходит на создание сайта? Сколько времени тратит специалист на разработку сайта? В какой срок можно создать сайт и чем обуславливается это?...
Категория: Интернет | Автор: Lizetta | Добавлено: 03.06.2011
Аватар gul_itb
Как правильно представить информацию на сайте Зачем люди сидят в Интернете? В основном есть две причины – это развлечение и поиск информации. Ваш корпоративный сайт, конечно же тоже служит этим двум целям Интернет-общения. Даже бизнес-сайт о чем-...
Категория: Интернет | Автор: gul_itb | Добавлено: 26.10.2009
Аватар Marta22
Как улучшить страницу на сайте вконтакте Советы, как сделать страницу в vkontakte лучше...
Категория: Интернет | Автор: Marta22 | Добавлено: 21.08.2009
Лучшие авторы
Аватар mansar
Созидатель

Читать

Аватар olegan2012
Бесплатная барахолка - vsebarahlo.ru

Читать

Аватар Игорь Губарев
Работаю психологом, пиарщиком, фотографом, Дедом М...

Читать

Аватар Алёна Славная
Я работаю тогда, когда все отдыхают. Занимаюсь орг...

Читать

Аватар Константин Петров
Экстрасенс, нумеролог, психолог.

Читать

Свежие комментарии
Нормальная тема.

Читать

Талантливый человек талантлив во всём! Будь как Паша! А ещё ты можешь ...

Читать

Можно выбрать.

Читать

Ой, шутник.

Читать

https://priornews.ru/zastrojshhik-iz-hmao-sravnil-ufas-s-prestupnoj-gr...

Читать

Напишите нам