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

Тема в разделе "SQL", создана пользователем Dymytry, 27 окт 2010.

  1. Dymytry

    Dymytry Гость

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

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

    Я разобрался, что в Oracle мне достаточно использовать Connect By, и все действительно работает:
    Код (Text):
    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 я так и не понял. Можете подсказать что-нибудь, а еще лучше написать? Мне надо сделать какую-то циклическую процедуру что ли?
     
  2. etc

    etc Гость

    Тут надо делать на стороне клиента.
     
  3. Dymytry

    Dymytry Гость

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

    Код (Text):
    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 структуры, из которого я хочу вывести древовидный каталог одним простым запросом без обработки на клиенте, а потом этот древовидный каталог использовать как меню для выбора категорий. Вооот...
     
  4. etc

    etc Гость

    Схем можно напридумывать скольугодно, только в каждой приходится на клиенте вазюваться.
     
  5. vital

    vital Больной Компом Детектед

    Регистрация:
    29 янв 2006
    Сообщения:
    2.468
    Симпатии:
    27
Загрузка...

Поделиться этой страницей