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

嵌套集模型,对类别中的项目进行计数

章振
2023-03-14
问题内容

我有一个适用于我的网站的嵌套集模型,其中包含子类别中的项目,依此类推。除一个我无法解决的问题外,它的工作效果非常好。

+---------+-----------------------------+
| item_id | item_name                   |
+---------+-----------------------------+
|       1 | Laptop                      |
|       2 | iPod Classic 80GB           |
|       3 | iPod Classic 160GB          |
+---------+-----------------------------+
+---------+-------------+
| item_id | category_id |
+---------+-------------+
|       1 |           4 |
|       2 |           2 |
|       3 |           2 |
+---------+-------------+
+-------------+--------------------+-----+-----+
| category_id | name               | lft | rgt |
+-------------+--------------------+-----+-----+
|           1 | iPod               |   1 |   6 |
|           2 | Classic            |   2 |   3 |
|           3 | Nano               |   4 |   5 |
|           4 | Computers          |   7 |   8 |
+-------------+--------------------+-----+-----+

使用以下查询:

SELECT parent.name, COUNT(product.item_id)
  FROM Category AS node, Category AS parent, Item_Category AS product
  WHERE node.lft BETWEEN parent.lft AND parent.rgt
        AND node.category_id = product.category_id
  GROUP BY parent.name
  ORDER BY node.lft;

提供以下输出:

+-----------------+------------------------+
| name            | COUNT(product.item_id) |
+-----------------+------------------------+
| iPod            |                      2 |
| Classic         |                      2 |
| Computers       |                      1 |
+-----------------+------------------------+

换句话说,不会显示其中没有产品的所有字段。现在到问题了,我想向他们展示COUNT()结果=0。我的查询将如何实现这一点?:)


问题答案:

听起来像是LEFT OUTER JOIN的一项任务,例如:

SELECT parent.name, COUNT(product.item_id), 
       (select count(*) from Category parent2 
         where parent.lft > parent2.lft
           and parent.rgt < parent2.rgt) as depth
  FROM Category parent
  LEFT OUTER JOIN Category node 
    ON node.lft BETWEEN parent.lft AND parent.rgt
  LEFT OUTER JOIN Item_Category product
    ON node.category_id = product.category_id
 GROUP BY parent.name
 ORDER by node.lft

因此,您确保显示所有类别。请注意,我不确定100%。

编辑:为深度添加了子选择,请尝试一下。

编辑:删除逗号



 类似资料:
  • Alpha-父级,子级为beta 贝塔-阿尔法的孩子,查理 Charlie-有一个列表,通常在制作中会被洗牌 AlphaTest[需要此测试的帮助]-想尝试不同的洗牌变体,看看alpha/beta会如何反应。 目标是用不同的组合测试Alpha/Beta。不知道最好的方法是什么?这正是复制的代码。也可以更改设置以方便测试。尝试了不同的变体,但没有任何效果。非常感谢您的帮助。 我不确定,我尝试了一堆方

  • 问题内容: 我有以下我想用流程注释的内容: 我知道该怎么做了类型检查,这样的类型的(如上图所示),但我怎么能型检查其属性呢? 已经尝试过: 但是随后流程只是抱怨而从未使用过。 问题答案: 因此,您要发送类型为的道具,该道具必须具有属性和? 如果没有编写执行此检查的自定义函数,则无法实现。为此,您需要这样声明: 这是官方文档所说的: 您还可以指定一个自定义验证器。如果验证失败,它将返回一个Error

  • 使用Laravel 5.6,我试图从MySQL类别表中显示子类别的子类别。我想传递这个名字,并获得它的所有子类,而不管父类是什么。 类别表 期望结果 return App\Category::where('name','Child-1-P-2'))-

  • 问题内容: 我正在寻找翻译来更改此内容: 到MongoJava聚合框架。就像是 : 我在文档中找不到答案,我认为它太糟糕了,否则我可能会迷失其中(|哑巴)。 我会先谢谢你 问题答案: 您可以使用以下聚合。

  • 本页包含内容: 嵌套类型实例 嵌套类型的引用 枚举类型常被用于实现特定类或结构体的功能。也能够在有多种变量类型的环境中,方便地定义通用类或结构体来使用,为了实现这种功能,Swift允许你定义嵌套类型,可以在枚举类型、类和结构体中定义支持嵌套的类型。 要在一个类型中嵌套另一个类型,将需要嵌套的类型的定义写在被嵌套类型的区域{}内,而且可以根据需要定义多级嵌套。 嵌套类型实例 下面这个例子定义了一个结

  • 问题内容: 我一直在尝试搜索包含嵌套字段的文档。我创建了这样的嵌套映射: 我的搜索如下所示: 但是我收到此错误消息: 编辑 我仍然收到此错误。我正在通过Java执行此操作,因此这是我要创建的文档: 像这样创建索引: 我认为我可能对文档编制了错误的索引。 问题答案: TLDR:输入您的嵌套类型。 假设我们有一个普通类型,并且嵌套了另一个类型: 该行是分配给的嵌套查询所必需的,如下所示: 该行似乎仅在