Russian Qt Forum
Ноябрь 22, 2024, 11:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Хранение дерева в mySQL  (Прочитано 6407 раз)
NetWorm
Гость
« : Сентябрь 21, 2012, 20:48 »

Вобщем имеется древовидная структура. Пример зал театра.

Основной зал
|-Амфитеатр левая сторона
    |-Ряд 01
    |-Ряд 02
    |-Ряд 03
|-Амфитеатр правая сторона
    |-Ряд 01
    |-Ряд 02
    |-Ряд 03

Вот суть такая. Это можно представить в виде одной таблицы с полями..
id, name, parent

В данном случае она будет выглядеть вот так
id|Name                            |parent
1|Основной зал                 |NULL - т.е. самый верхний уровень
2|Амфитеатр левая сторона|1 - ссылка на верхний уровень
3|Ряд 01                           |2 - ссылка на "Амфитеатр левая сторона"
4|Ряд 02                           |2 - ссылка на "Амфитеатр левая сторона"

Вопрос. Как мне получить данные например Ряд 01 | Основной зал. т.е. получить через Ряд 01 мы можем получить строку Амфитеатр, а через амфитеатр можем получить Основной зал.

Сложность в том что уровней может быть разное количество.


Записан
trot
Гость
« Ответ #1 : Сентябрь 22, 2012, 09:58 »

Рекурсивные запросы - with recursive ...., но в mysql к сожалению нет рекурсивных запросов. Посмотрите здесь - http://club.shelek.ru/viewart.php?id=306.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #2 : Сентябрь 22, 2012, 18:04 »

Способов хранить иерархические данные в реляционной БД великое множество, начиная от примитива id-parent (как у тебя) до представления деревьев в виде XML и использования XPath индексов для доступа к данным (как у MSSQL). Всё зависит от того перечня действий с деревом, который тебе нужен. Если нужны всего лишь получение всех потомков и предков узла достаточно создать дополнительную таблицу, в которой хранить тройки id-parent-level для всех узлов (где level - уровень вложенности узла).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 22.