【问题标题】:MySQL Query: query the PRODUCTS table (among others) and bring up BOTH the category AND subcategoryMySQL 查询:查询 PRODUCTS 表(以及其他)并同时显示类别和子类别
【发布时间】:2010-12-30 21:41:00
【问题描述】:

我想知道是否有人可以帮助我解决我遇到问题的 MySQL (v5.0.51) 查询。我有一张这样的桌子:

category_id  | category_text  | subcategory
25           | Motor Controls | NULL
26           | Contactors     | 25
27           | Overloads      | 25
28           | Motors         | NULL
29           | Accessories    | 28

subcategory 列中带有 NULL 的每个条目代表一个顶级类别,subcategory 中的值告诉该子类别属于哪个顶级类别。 p>

例如上面: 接触器和过载属于电机控制,因为它们各自的子类别的值为 25,即电机控制的 category_id (25)

现在我在 PRODUCTS 表中使用这些值来存储产品,但在这里我只存储子类别的 category_id。

product_id | product_item | product_supplier_id | product_description   | product_category_id
24         | Product A    | 39                  | Product A description | 27 --category_id of subcategory (ie.Overloads)
25         | Product B    | 39                  | Product B description | 26 --(Contactors)

我遇到的问题是我需要 一个 SQL 查询,我可以在其中查询 PRODUCTS 表(以及其他)并同时显示类别和子类别。我可以为一个或另一个做,但不能两者兼而有之。我已经尝试过 UNION、JOINS 等,但似乎无法得到它。到目前为止,这就是我所拥有的,它只是提出了子类别。

SELECT p.*, c.company_name, pc.category_text AS subcategory 
FROM products p, company c, product_categories pc 
WHERE p.product_supplier_id = c.company_id 
AND p.product_category_id = pc.category_id

这会导致查询生成以下结果。

product_id | product_item | product_supplier_id | product_description   | product_category_id | company_name       | subcategory
24         | Product A    | 39                  | Product A description | 27                  | Product A Supplier | Overloads
25         | Product B    | 39                  | Product B description | 26                  | Product B Supplier | Contactors

基本上我想要的是为每个子类别添加一个包含正确顶级类别的列,使其看起来像这样

24 | Product A | 39 | Product A description | 27 | Product A Supplier | **Motor Controls** | Overloads

我可以通过创建表的方式来做到这一点还是需要修改它?

抱歉,我提供了一些漂亮的图片以使其更易于理解,但“声誉”为 1 ,我无法发布它。

任何帮助将不胜感激。请注意,我使用 PHP 中的查询来访问 MySQL 数据库。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:
    SELECT  p.*, 
                    c.company_name, 
                    pc.category_text AS subcategory 
                    ppc.category_text AS category 
      FROM  products p, 
                    company c,
                    product_categories pc,
                    product_categories ppc
     WHERE  p.product_supplier_id = c.company_id 
       AND  p.product_category_id = pc.category_id
         AND    pc.subcategory = ppc.category_id
    

    P.S:我希望 MySQL 能够更好地支持查询分层数据(如 Oracle 中的 connect by 子句)

    【讨论】:

    • 谢谢!那工作得很好。我想我让它变得比它需要的更复杂......尽管每个人都说当提出解决方案时,对吗?再次感谢!
    【解决方案2】:
      SELECT  p.*, c.company_name, pc.category_text AS subcategory,ppc.category_text AS category 
      FROM  products p 
      left join company c on p.product_supplier_id = c.company_id
      left join product_categories pc on p.product_category_id = pc.category_id
      left join product_categories ppc on pc.subcategory = ppc.category_id
    

    【讨论】:

    • 只是为了记录,这也有效。它给了我一个可供学习的选择。谢谢!
    猜你喜欢
    • 2021-11-30
    • 2022-01-05
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多