Задать вопрос
@sadCake

Как сделать выборку с условием для всех родительских элементов?

Мне приходят id категорий, задача - найти все эти категории, но так же необходимо учесть, что у всех родителей для данной категории стоит active = 1. Помимо parent_id есть еще path, куда складывается путь к этой категории на основе slug'ов родительских категорий (пример: /main/sub1/sub2/.../category).

Был, конечно, вариант с перебором родителей отдельно для всех id, но это слишком много запросов. К тому же это также нужно сделать и для товаров (приходят id товаров, далее нужно смотреть, что категория товара и все родительские активны), а там запросов будет еще больше.
  • Вопрос задан
  • 43 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@WaterSmith
Android-разработчик. Java, Kotlin
я правда не знаю, доступна ли эта магия на MySQL
WITH CTE_Hierarchy (id,  parent_id, level, path) 
AS 
(SELECT id, parent_id, 1 ,cast(slug as varchar(100)) as path
    FROM 
        categoryes
    WHERE parent_id IS NULL //Если для пустых parent_id предусмотрено другое значение то поменять условие
    UNION ALL 
       SELECT subcategory.id, subcategory.parent_id, level + 1, 
		case cast(path + '/' + subcategory.slug as varchar(100)) as path
    FROM  categoryes AS subcategory 
INNER JOIN CTE_Hierarchy AS parentHierarchy ON subcategory.parent_id = parentHierarchy.id)


https://docs.microsoft.com/en-us/sql/t-sql/queries...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы