当前位置:  开发笔记 > 编程语言 > 正文

选择类别属于层次结构中任何类别的产品

如何解决《选择类别属于层次结构中任何类别的产品》经验,为你挑选了1个好方法。

我有一个产品表,其中包含一个类别的FK,Categories表以每个类别可以具有父类别的方式创建,例如:

Computers
    Processors
        Intel
            Pentium
            Core 2 Duo
        AMD
            Athlon

我需要做一个选择查询,如果所选类别是处理器,它将返回Intel,Pentium,Core 2 Duo,Amd等产品......

我考虑创建某种"缓存",它将为数据库中的每个类别存储层次结构中的所有类别,并在where子句中包含"IN".这是最好的解决方案吗?



1> MDCore..:

对此的最佳解决方案是在数据库设计阶段.您的类别表必须是嵌套集.MySQL中管理分层数据的文章并不是特定于MySQL的(尽管有标题),并且很好地概述了在数据库表中存储层次结构的不同方法.

执行摘要:

嵌套集

选择对于任何深度都很容易

插入和删除很难

标准的基于parent_id的层次结构

选择基于内部连接(因此快速获取毛刺)

插入和删除很容易

因此,根据您的示例,如果您的层次结构表是嵌套集,则查询将如下所示:

SELECT * FROM products 
   INNER JOIN categories ON categories.id = products.category_id 
WHERE categories.lft > 2 and categories.rgt < 11

2和11分别是Processors记录的左和右.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有