简体   繁体   English

MYSQL 8 +:查询查找类别下的产品,当类别在层次结构中并且产品附加到叶类别节点时

[英]MYSQL 8 + : Query to find the products under categories , when category is in hierarchy and product is attached to leaf category node

Table: categories表:类别

id ID name名称 parent父母
1 1个 Electronics电子产品 null null
2 2个 TV电视 1 1个
3 3个 Portable便携的 1 1个
4 4个 CRT阴极射线管 2 2个
5 5个 LCD液晶显示器 2 2个
6 6个 Plasma等离子体 2 2个
7 7 Mp3 Players音乐播放器 3 3个
8 8个 CD Players CD 播放器 3 3个
9 9 Flash Flash 7 7

Table: products (products are attached to the leaf category id)表:产品(产品附在叶子类别id上)

id ID name名称 category_id类别编号
1 1个 Flash Player Flash 播放器 9 9
2 2个 Samsung LCD TV三星液晶电视 5 5个
3 3个 LG Plasma TV LG 等离子电视 6 6个

Query to generate the category_products results set??查询生成category_products结果集??

Results set:结果集:

id ID product_id产品编号 category_id类别编号
1 1个 1 (Flash Player) 1 (Flash 播放器) 9 (Flash) 9(闪光灯)
2 2个 1 (Flash Player) 1 (Flash 播放器) 7 (Mp3 Players) 7(Mp3 播放器)
3 3个 1 (Flash Player) 1 (Flash 播放器) 3 (Portable) 3(便携式)
4 4个 1 (Flash Player) 1 (Flash 播放器) 1 (Electronics) 1(电子)
5 5个 2 (Samsung LCD TV) 2(三星液晶电视) 5 (LCD) 5(液晶)
6 6个 2 (Samsung LCD TV) 2(三星液晶电视) 2 (TV) 2(电视)
7 7 2(Samsung LCD TV) 2(三星液晶电视) 1 (Electronics) 1(电子)
5 5个 3 (LG Plasma TV) 3(LG 等离子电视) 5 (PLasma) 5(等离子)
6 6个 3 (LG Plasma TV) 3(LG 等离子电视) 2 (TV) 2(电视)
7 7 3(LG Plasma TV) 3(LG等离子电视) 1 (Electronics) 1(电子)

How can we generate this results set from mysql query?我们如何从 mysql 查询生成这个结果集?

WITH RECURSIVE
  recursive_membership AS
(
  SELECT
    p.id     AS product_id,
    p.name   AS product_name,
    c.id     AS category_id,
    c.name   AS category_name,
    c.parent AS category_parent_id
  FROM
    products     p
  INNER JOIN
    categories   c
      ON c.id = p.category_id

  UNION ALL

  SELECT
    r.product_id,
    r.product_name,
    c.id,
    c.name,
    c.parent
  FROM
    recursive_membership   r
  INNER JOIN
    categories             c
      ON c.id = r.category_parent_id
)
SELECT
  product_id,
  product_name,
  category_id,
  category_name
FROM
  recursive_membership

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM