Php MySQL查询:查询PRODUCTS表(以及其他),并同时显示类别和子类别

Php MySQL查询:查询PRODUCTS表(以及其他),并同时显示类别和子类别,php,mysql,sql,Php,Mysql,Sql,我想知道是否有人能帮我处理一个我遇到问题的MySQL(v5.0.51)查询。我有一张这样的桌子: category_id | category_text | subcategory 25 | Motor Controls | NULL 26 | Contactors | 25 27 | Overloads | 25 28 | Motors | NULL 29

我想知道是否有人能帮我处理一个我遇到问题的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
“子类别”列中的每个条目均为NULL,表示顶级类别,子类别中的值表示子类别所属的顶级类别

例如,上文: 接触器和过载属于电机控制,因为它们各自的子类别的值为25,这是电机控制的类别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)
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
我遇到的问题是,我需要一个SQL查询,在这里我可以查询PRODUCTS表(以及其他表),并同时显示category和subcategory。我可以为其中一个做,但不能同时为两个做。我尝试过联合、加入等,但似乎无法实现。这是我到目前为止所做的,只是提出了子类别

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)
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数据库

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

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

谢谢!这非常有效。我想我把事情弄得比实际需要的更复杂了……虽然每个人在提出解决方案时都这么说,对吗?再次感谢!为了记录在案,这也起了作用。这给了我另一个学习的机会。谢谢