Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2009, 15:07   #1
eurobax
Новичок
Джуниор
 
Регистрация: 25.11.2009
Сообщений: 3
Стрелка Вывод каталога с учетом иерархии из MySQL

Ищу лучшее решение по производительности/гибкости для MySQL. А задача такая:
Есть каталог товаров

1. Бытовая техника
1.1. Телевизоры
1.1.1.Плазменные
1.1.1.1. LG
1.1.1.1.1 LG 101
1.1.1.1.2 LG 202
1.1.1.1.3 LG 505
1.1.1.2. Samsung
1.1.1.2.1 Sam 1001
1.1.1.2.2 Sam 2002
1.1.1.2.3 Sam 5005
и т.д.

Коды типа "1.1.1.2.3" я привел для наглядности, я не храню их в записи, т.к. иерархия может быть бесконечная, а число элементов в группе может быть сотни тысяч.
И мне нужно вывести записи с учетом этого порядка (как указано вверху) - сперва первая группа, потом все ее вложенные элементы, а потом уже следующая группа.

Какие задачи еще должны решаться:
- определение полного пути до элемента
- определение принадлежности элемента группе (в т.ч. и ее подгруппам)
- быстрый перенос ветки дерева в другую ветку.

1. Nested Sets я уже рассмотрел, они не подходят под последнее условие.

2. Есть еще вариант, когда я храню все отношения между группами в отдельной таблице, там все отлично, все условия решаются одним запросом к БД. НО, иерархический вывод приходится делать скриптами (тоже один запрос, а потом рекуривная сортировка)

Какие еще могут быть предложения?
eurobax вне форума Ответить с цитированием
Старый 25.11.2009, 15:41   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

интересно было бы посмотреть на решение 2... не очень понимаю что значит отношения между группами?
....
а я у себя реализацию древовидную делал обычными запросом всех элементов... .и уже потом с этими данными в скриптах работаю... все что угодно делаю
ADSoft вне форума Ответить с цитированием
Старый 25.11.2009, 15:57   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
интересно было бы посмотреть на решение 2... не очень понимаю что значит отношения между группами?
видимо, структура типа
id, parent_id

ТС поправит если что
soleil@mmc вне форума Ответить с цитированием
Старый 25.11.2009, 16:08   #4
eurobax
Новичок
Джуниор
 
Регистрация: 25.11.2009
Сообщений: 3
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
интересно было бы посмотреть на решение 2... не очень понимаю что значит отношения между группами?
Про отношения между группами я имею в виду следующее:
1. Все записи поделим уловно на группы (есть вложения) и элементы (листья)

я храню записи <id группы>|<id подгруппы> для всех связей в дополнительной таблице.
В примере, это будут записи:
<id Бытовая техника> <id Телевизоры>
<id Бытовая техника> <id Плазменные>
<id Бытовая техника> <id LG>
<id Телевизоры> <id Плазменные>
<id Телевизоры> <id LG>
<id Плазменные> <id LG>
и т.д.
Думаю, суть понятна.
Забыл отметить, что Групп у меня не так много как элементов
Насчет оптимизации - если происходит перемещение ветки дерева, то я перезаписываю только эту таблицу (только изменения). Так же, при добавлении группы/удалении я тоже вношу изменени в эту таблицу.
Все эти операции делаются одним запросом, так что меня устраивает.

Насчет обработки результата выборки скриптами - стараюсь все вынести на SQL, если это возможно, т.к. большие объемы данных при обработке скриптами, а если там еще и рекурсия, повешают хост.
Помимо этого, я еще указал выше, какие условия должны решаться. И скриптами их реализовывать - это очень непроизводительно.
eurobax вне форума Ответить с цитированием
Старый 25.11.2009, 22:45   #5
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

смысл понятен....
а как к примеру выглядит SQL запрос получения пути до группы или элемента.... или списка всех принадлежащих групп?
ADSoft вне форума Ответить с цитированием
Старый 26.11.2009, 10:05   #6
eurobax
Новичок
Джуниор
 
Регистрация: 25.11.2009
Сообщений: 3
По умолчанию

Чтобы определить путь до узла (хоть группа, хоть элемент), во вспомогательной таблице помимо отношения <id группы><id подгруппы> храним еще поле <уровень группы>. Это даст возможность сортировки по уровню.
И запрос будет выглядеть типа этого:

SELECT c.caption, t.subgroup_level FROM catalog5_tree AS t
LEFT JOIN catalog5 AS c ON (c.id = t.group_id)
WHERE t.subgroup_id = "11" ORDER BY t.group_level

caption - здесь хранится название узла
catalog5 - основная таблица каталога
catalog5_tree - вспомогательная таблица с отношениями групп
t.group_id - id группы,
t.subgroup_id - id подгруппы
t.group_level - уровень группы

Последний раз редактировалось eurobax; 26.11.2009 в 10:10.
eurobax вне форума Ответить с цитированием
Старый 28.11.2009, 11:14   #7
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

чето видимо я тупой....
создал таки таблицы.... заполнил значениями
выполняю запрос - получаю не путь.... а ерунду какую то..... одну запись получаю только...вместо массива
ADSoft вне форума Ответить с цитированием
Старый 17.08.2012, 16:05   #8
Aza-Zel
 
Регистрация: 15.08.2012
Сообщений: 8
По умолчанию

Братан, если разобрался, дай знать что и как, 4ую неделю бьемся, не можем сделать вывод структуры трех и более ветвей, в общем полный ппц)
Aza-Zel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод значения с mysql на сайт. safrin PHP 1 16.11.2009 02:21
Вывод пар из таблицы mysql Алежа PHP 2 26.05.2009 22:18
MySQl+PHP5 как сделать запрос на вывод текста в ближайшие 5 дней xxxsas SQL, базы данных 2 10.05.2009 14:04
Вывод иерархии каталогов на экран bat0 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 25.04.2009 20:13
TASM,fat16 вывод иерархии каталогов диска bat0 Помощь студентам 2 21.04.2009 22:10