За последние 24 часа нас посетили 22399 программистов и 1030 роботов. Сейчас ищут 619 программистов ...

Выборка материалов из подкатегорий

Тема в разделе "MySQL", создана пользователем Anatoly1984, 21 апр 2019.

  1. Anatoly1984

    Anatoly1984 Новичок

    С нами с:
    21 апр 2019
    Сообщения:
    1
    Симпатии:
    0
    Добрый день. Имеется две таблицы

    Таблица с категориями древовидная и вложенность неограниченная

    id_category, id_parent, name

    1, null, главная категория
    2, 1, подкатегория1
    3, 1, подкатегория2
    4, 1, подкатегория3
    5, 2, подкатегория1.1
    6, 2, подкатегория1.2
    7, 2, подкатегория1.3
    8, 2, подкатегория1.4
    9, 8, подкатегория1.4.1
    10, 8, подкатегория1.4.2
    11, 8, подкатегория1.4.3
    12, 8, подкатегория1.4.4


    Таблица с материалами

    id_mat, id_category, name
    1, 9, материал1
    2, 10, материал2
    3, 3, материал3
    4, 4, материал4
    5, 5, материал5
    6, 6, материал6


    Как составить запрос чтобы получить материалы из категории и всех подкатегорий ?

    Например для категории с id_cat = 8 получить материалы с id_mat = 1 и 2

    Заранее спасибо !
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям
    такая структура (называется Adjacency List) не позволяет получить то что ты хочешь в один приём.

    ЕСЛИ список категорий не очень большой и к тому же редко изменяемый, тогда можно держать его в кеше и пред-вычислить список всех нужных категорий на стороне php, а потом подставить в запрос в условие
    WHERE id_category IN(....)
    --- Добавлено ---
    П.С. в некоторых диалектах SQL есть специальные средства для обработки деревьев. в стандарте ANSI SQL и в MySQL такого нет.

    П.П.С. есть другие подходы, например Materialized Path или Nested Sets. их легко нагуглить.
    они хорошо справляются с выборкой всех вложенных, но них есть свои недостатки.
     
  3. retvizan

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

    С нами с:
    27 дек 2013
    Сообщения:
    68
    Симпатии:
    22
    это не так, см Рекурсивные Обобщенные Табличные Выражения в MySQL, часть 3 - иерархии

    речь про WITH RECURSIVE или что-то иное?
     
  4. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.236
    Адрес:
    там-сям