2011-11-16 58 views
0

我从一个我从别人继承的项目中有一个名为'categories'的MYSQL表。在MYSQL结果中从表中检索父类别名称

id   parent_id  name 
1   NULL   Travel 
2   NULL   Sleep 
3   NULL   Eat 
4   NULL   Bath 
5   1    Prams 
6   1    Travel Systems 
7   2    Cots 
8   3    High Chairs 

该表显然比这个大得多,但你得到了一般的想法。我有一个MYSQL语句,将此表与其他类别,品牌和产品表结合在一起,但基本上我想列出上表中的父类别名称与语句中的子类别。我该怎么做呢?

我现在的说法是这样的:

SELECT brands.name, products.name, categories.id, categories.name, brands.id, 
FROM `products` , `brands` , `categories` 
WHERE products.brand_id = brands.id 
AND products.category_id = categories.id 
AND brands.name = '$brand' 
ORDER BY categories.name, products.name 

如何检索结果中的父类的名字呢? 例如,如果产品是婴儿车,我怎样输出“旅行”。我可以在循环中执行单独的MYSQL语句,但我想避免这种情况。这可能是一个愚蠢简单的问题(在这种情况下,我为因脑死亡而道歉)或者更复杂一点!谢谢。

回答

1

首先,你需要知道当前类的父ID,然后该ID获得的名称,你可以以这种方式使用子查询:

SELECT name FROM categories WHERE id = (SELECT pid FROM categories WHERE name = $brand) 

编辑:既然你需要得到类别和子类别名称在同一行中给定子类别ID,请尝试此操作:

SELECT sc.name AS subcategory, c.name AS category 
FROM categories sc 
LEFT JOIN categories c ON c.id = sc.parent 
WHERE sc.id = $subcategory_id 
+0

谢谢。我们知道列出的每个产品的parent_id和子类别名称。我想列出与子类别一起列出的每种产品的父类别。有没有一种方法,我可以做我的查询上面,我的查询检索类别名称(即从category.parent_id = category.id获取category.name) – iagdotme

+0

这是一个不同的问题,请参阅我上面的新答案:-) – Flupkear

+0

这很难解释。类别表在同一个表中具有类别和“子类别”。例如,前4个是“父类别”(它们的父代ID设置为NULL),其余的是“子类别”。因此,“高级椅子”的父类别是“吃”,因为父级ID是“3”。说实话,我讨厌桌子的结构,因为它让我的生活变得很困难! – iagdotme