@sadCake

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

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

Был, конечно, вариант с перебором родителей отдельно для всех id, но это слишком много запросов. К тому же это также нужно сделать и для товаров (приходят id товаров, далее нужно смотреть, что категория товара и все родительские активны), а там запросов будет еще больше.
  • Вопрос задан
  • 33 просмотра
Решения вопроса 2
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
я бы рассчитывал такой статус для наследников при изменении active родителей и не имел бы проблем при выборке
Ответ написан
@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...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Кенарий Санкт-Петербург
от 120 000 до 300 000 ₽
от 90 000 до 110 000 ₽
от 100 000 до 220 000 ₽
19 сент. 2020, в 11:26
17500 руб./за проект
19 сент. 2020, в 10:21
10000 руб./за проект
19 сент. 2020, в 09:27
1000 руб./в час