そこで、MySQL を使用し、ネストされたセット/修正済みプレオーダー ツリー トラバーサル モデルに基づくカテゴリ構造を、次category_id
のフィールドを持つ「nested_category」というテーブル名に格納しています
。name
lft
rgt
published
published
1 または 0 のいずれかです... 1 の場合、カテゴリはライブ サイトに表示されます。0 の場合、ライブ サイトに表示されません。さらに重要なことに、その未公開カテゴリの子もライブ サイトに表示されません。
published=1
を持つすべてのカテゴリをリストし、 を持つカテゴリの子孫であるすべてのカテゴリを無視するクエリを書くのに問題がありますpublished=0
。
現時点で私は使用しています:
SELECT category_id, lft, rgt FROM nested_category WHERE published = 1
親が「非公開」のときに「子」カテゴリを無視する方法が本当にわかりません。
product_id
また、これをフィールドname
を持つ「new_products」テーブルにリンクしようとしています。私はここまで来ました: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
上記のクエリは最初のクエリを使用しているため、「未公開」のカテゴリや製品は返されませんが、「公開済み」カテゴリが「未公開」カテゴリの子孫である場合は考慮されません。これが理にかなっていることを願っています!