因此,我使用 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
由于上面的查询使用我的第一个查询,它不会返回任何“未发布”类别或产品,但它没有考虑“已发布”类别是“未发布”类别的后代。希望这是有道理的!