当前位置: 首页 > 面试题库 >

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

艾嘉石
2023-03-14
问题内容

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

Computers
    Processors
        Intel
            Pentium
            Core 2 Duo
        AMD
            Athlon

我需要进行选择查询,如果选择的类别是“处理器”,它将返回英特尔,奔腾,Core 2 Duo,AMD等产品。

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


问题答案:

最好的解决方案是在数据库设计阶段。您的类别表必须是一个 嵌套集
。文章“在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记录的左侧和右侧。



 类似资料:
  • 问题内容: 我试图从我的MySQL数据库中按层次结构获取所有类别和子类别: 我的结果应该是这样(只是示例): 猫A 子猫1 Sub_Sub_Cat 1 Sub_Sub_Cat 2 子猫2 猫B C猫 … MySQL代码: 简而言之,如何在使用 PHP代码 的层次结构中获得它? 问题答案: 使用邻接表模型时,您可以一次性生成结构。 取自一遍父子数组结构(2007年9月; Nate Weiner撰写)

  • 我的数据库中有两个表: 我怎么能这样回报: 我在类别表中使用“WITH RECURSIVE”,但找不到将产品表与1次查询相结合的方法。我使用这里的例子 最好的方法是什么?

  • 这是一个产品的表格结构 这是类别的表结构 我在为包括嵌套类别在内的每个类别选择产品计数时遇到困难。例如,类别有1个产品,类别有1个产品,类别有1个产品,并且由于类别和是类别的各自直接/间接祖先,类别有3个产品。所以我需要一个查询或只是一种方法来获得这样的东西: 是否可以只使用SQL,或者我需要添加一些PHP?

  • 问题内容: 我在这方面遇到了困难。我已经看到了一些示例,这些示例说明了如何从给定父级的自引用表中获取所有子级记录,甚至如何获取子级记录的父级。 我想做的是返回一条记录,并给所有子记录指定ID。 为了说明这一点-我有一个公司层次结构。在哪里: 我需要的是一个过程(1)弄清记录的级别,以及(2)检索该记录和所有子记录。 作为区域的想法可以看到一个区域中的所有地区和代表,而地区可以看到他们的代表。代表只

  • 问题内容: 我有一个表,它表示类别层次结构,层次结构顶部的元素的父ID为0。在CatID列中有超过54K个唯一ID。每个ID可以是另一个ID的父对象。类别深入8个级别。该表如下所示: 这就是我想要实现的结果: 我怎样才能做到这一点?我是否需要某种循环才能遍历所有ID? 有人可以帮忙吗? 问题答案: 这里是:

  • 如何显示类别结构像WordPress使用php? ( [0] = )