MySQL嵌套集搜索

| 我真的很想在我们的PHP / MySQL驱动的商店中处理嵌套集查询,我将以电子零件为例。 类别存储为嵌套集合模型(左,右和深度)。 当客户浏览商店时,他们可以按品牌,类别,价格范围等过滤产品列表。 假设某个客户正在查看Sony的所有产品。索尼将在计算,电视,音频和家用设备中拥有产品。 但是Sony产品没有存储在这些类别中(但是可以存储),它们存储在那些主要类别的子类别中,例如:
Televisions > LCD > Widescreen
Televisions > CRT
Computing > Optical Drives > DVD-RW
Computing > Input Devices > Wireless > Keyboards
Audio > Portable > MP3
Household Appliances
客户选择了Sony之后,我希望他们可以选择按类别缩小范围,因此他们最初会有以下选择:
Televisions
Computing
Audio
Household Appliances
但我只能执行一个查询,以带回特定类别的列表:
Widescreen
CRT
DVD-RW
Keyboards
MP3
Household Appliances
我需要显示主要类别,然后如果客户选择电视,他们将获得选择:
LCD
CRT
任何人都可以帮我解决这个问题,最好以尽可能短的递归(因此首先使用嵌套集)或太多查询的方式尽快返回信息,我将不胜感激。 这是我用来获取子类别列表的查询,如果它有助于数据库的结构:
select      c.categories_id, cd.categories_name, c.parent_id, c.lft, c.rgt, c.dpth
from        categories c
inner join  categories_description cd on cd.categories_id = c.categories_id
inner join  products_to_categories p2c on p2c.categories_id = c.categories_id
inner join  products p on p.products_id = p2c.products_id
where       cd.language_id=\'1\'
and         c.lft between 3489 and 3670
and         c.categories_status = \'1\'
group by    c.categories_id
order by    sort_order, cd.categories_name
由于数据库最初是一个邻接模型结构,因此每个类别ID也会存储父ID,如果这样做可以简化任何操作的话。 谢谢。     
已邀请:
        根据您的评论,您尝试了其他方法,但我想我还是会回答。 正如您发现的那样,ѭ5模型在快速有效地检索节点和叶子方面是极好的。但是一个“ 6”是您发现插入后很难订购该列表。 我过去通过以下方法克服了这一点:a)在客户端进行排序(困难),然后进行缓存,或b)确保插入节点/叶,以便对其进行自动排序(甚至使用向上/向下链接,以便管理员可以插入发生后,请自行订购。 我个人喜欢选项2,但从未发现它是一个问题。     

要回复问题请先登录注册