За последние 24 часа нас посетили 18243 программиста и 1600 роботов. Сейчас ищут 916 программистов ...

Вложенность категорий: конкретные данные

Тема в разделе "PHP и базы данных", создана пользователем xaocbozzz, 29 авг 2012.

  1. xaocbozzz

    xaocbozzz Активный пользователь

    С нами с:
    4 апр 2012
    Сообщения:
    19
    Симпатии:
    0
    Есть таблица номер раз:
    - category_table
    category_id | category_name | category_parent
    54551 | собака | PARENT
    55463 | котяра | PARENT
    22156 | черный | 54551
    55461 | белый | 54551
    11245 | ленивый | 55463
    69844 | надиванележака | 22156
    97774 | многоводывыпивака | 22156

    Есть таблица номер два:
    - product_table
    product_id | product_name | product_parent
    16012 | Барбос | 69844
    25441 | Шарик | 97774

    Вопрос:
    Как на одной странице вытащить данные вот в таком виде:

    черный:
    Барбос
    Шарик

    с минимальным количеством запросов к базе.
    рассматриваются предложения по изменению структуры таблиц.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ответ:
    Код (Text):
    1. SELECT product_name FROM product_table
    Добавлено спустя 3 минуты 11 секунд:
    как корабль назовешь, так он и поплывет.
    предлагаю для начала переименовать сущности. из названия таблиц выкинуть слово table, а поле product_parent переименовать в category_id. насколько я понял данную структуру, это будет отражать суть вещей. а то сейчас в именах ад кромешный

    Добавлено спустя 8 минут 8 секунд:
    надеюсь ты уловил сарказм. чтобы получить правильный ответ надо правильно задать вопрос.
    если ты хотел вычислить всех черных собак из БОЛЬШОЙ таблицы животных, то такой тип огранизации дерева не очень подходит.

    это называется adjacency list, а быстрые выборки любой вложенности обеспечиваются техникой nested sets либо natural path.
    гугли и тебе возгуглится!

    p.s. в принципе для частных случаев, когда категорий гарантированно немного, либо уровень вложенности категорий гарантированно не превышает малое число, есть способы и с такой структурой выкрутиться.

    p.p.s. а как ты предполагаешь описывать черных котов? несколько категорий "черный" заведешь?
     
  3. bes231084

    bes231084 Активный пользователь

    С нами с:
    11 сен 2012
    Сообщения:
    8
    Симпатии:
    0
    Точный ответ на твой вопрос:
    Код (Text):
    1.  
    2. SELECT  category_name FROM category_table WHERE category_id = '22156'
    Можно и так
    Код (Text):
    1.  
    2. SELECT  category_name FROM category_table WHERE category_parent = '54551'
    Выведет: черный
    а как вывести Барбоса и Шарика уже написали
    Код (Text):
    1.  
    2. SELECT product_name FROM product_table