Добрый день. Имеется две таблицы Таблица с категориями древовидная и вложенность неограниченная 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 Заранее спасибо !
такая структура (называется Adjacency List) не позволяет получить то что ты хочешь в один приём. ЕСЛИ список категорий не очень большой и к тому же редко изменяемый, тогда можно держать его в кеше и пред-вычислить список всех нужных категорий на стороне php, а потом подставить в запрос в условие WHERE id_category IN(....) --- Добавлено --- П.С. в некоторых диалектах SQL есть специальные средства для обработки деревьев. в стандарте ANSI SQL и в MySQL такого нет. П.П.С. есть другие подходы, например Materialized Path или Nested Sets. их легко нагуглить. они хорошо справляются с выборкой всех вложенных, но них есть свои недостатки.
это не так, см Рекурсивные Обобщенные Табличные Выражения в MySQL, часть 3 - иерархии речь про WITH RECURSIVE или что-то иное?
Да, вы правы, в MySQL 8, релиза которого никто не заметил и в новой мариадб есть восхитительные вещи. Стоит обратить внимание на common table expressions.