Поэтому я использую MySQL и сохраняю свою структуру категорий на основе модели обхода вложенного набора / измененного дерева предварительных заказов в виде таблицы "nested_category", которая имеет поля: category_id
, name
, lft
, rgt
, published
published
- это либо 1, либо 0 ... Если это 1, тогда категория будет отображаться на живом сайте.Если он равен 0, то он не будет отображаться на живом сайте, и, что более важно, любые дети этой неопубликованной категории также не будут отображаться на живом сайте.
У меня проблемынаписание запроса для перечисления всех категорий, которые имеют published=1
, и игнорирование всех категорий, которые являются потомками категории, которая имеет published=0
.
В данный момент я использую:
SELECT category_id, lft, rgt FROM nested_category WHERE published = 1
Я действительно не могу понять, как заставить его игнорировать «дочерние» категории, когда родительский «неопубликованный».
Я также пытаюсь связать это с моей таблицей «new_products», которая имеетполя: product_id
, name
, stock
, price
, category_id
, чтобы я мог написать запрос, чтобы выбрать все продукты, которые имеют published=1
и являются частью категории "опубликованные".Я получил это далеко:
select @myRight := rgt, @myLeft := lft
from nested_category where name="ELECTRONICS";
select productId, productName, new_products.category_id,
price, stock, new_products.published
from new_products
inner join (
select category_id, lft, rgt from nested_category
where published = 1
) cat
on new_products.category_id = cat.category_id
and cat.lft >= @myLeft
and cat.rgt <= @myRight
and new_products.published = 1
order by productName asc
Поскольку вышеупомянутый запрос использует мой первый запрос, он не возвращает никаких «неопубликованных» категорий или продуктов, но он не учитывает, когда «опубликован»категория является потомком "неопубликованной" категории.Надеюсь, что это имеет смысл!