gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:51:20 24 4
gpt4 key购买 nike

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

Computers
Processors
Intel
Pentium
Core 2 Duo
AMD
Athlon

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

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

最佳答案

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

关于sql - 选择类别属于层次结构中任何类别的产品,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/197362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com