Как заменить оракловский Сonnect By в Mysql?

  • Автор темы Dymytry
  • Дата начала
D

Dymytry

#1
Знатоки!
Помогите начинающему знатоку разобраться с SQL.

У меня есть следующая таблица с иерархией товаров:
ATTRIBUTE_ID, ATTRIBUTE_PARENT_ID, ATTRIBUTE_VALUE. Мне надо вывести ее так, чтобы была видна ее древовидная структура. То есть

__1 0 BOSS
____2 1 VICE-BOSS
____3 1 BOSS-WIFE
______4 3 BOSS-WIFE-MOM
____4 1 BOSS-BEST-FRIEND
Я разобрался, что в Oracle мне достаточно использовать Connect By, и все действительно работает:
Код:
column padded_name format a30
select lpad(' ', (2 - 1) * 2) || attribute_value as padded_name, attribute_value, attribute_id, attribute_parent_id
from attributes_text
connect by prior attribute_id=attribute_parent_id
start with attribute_parent_id=0
Но в MySQL нет Conenct By. Я видел много статей про иерархии, но как сделать это в MySQL я так и не понял. Можете подсказать что-нибудь, а еще лучше написать? Мне надо сделать какую-то циклическую процедуру что ли?
 
D

Dymytry

#3
OK,
а я тем временем встретил вот такую схему, какие ее недостатки вы видите?

Код:
ATTRIBUTE_ID, ATTRIBUTE_NAME, ATTRIBUTE_POSITION

1 BOSS 1
2 _VICE-BOSS 1.1
3 __VICE-BOSS-MOM 1.1.1
4 _BOSS-WIFE 1.2
5 __BOSS-WIFE-MOM 1.2.1
Сортировка по ATTRIBUTE_POSTION даст нужный результат - древовидную структуру, а найти одну ветвь дерева весьма просто через LIKE 1.%

Вообще это у меня набор параметров для EAV структуры, из которого я хочу вывести древовидный каталог одним простым запросом без обработки на клиенте, а потом этот древовидный каталог использовать как меню для выбора категорий. Вооот...
 
E
#4
Схем можно напридумывать скольугодно, только в каждой приходится на клиенте вазюваться.