在select语句mysql中进行选择

时间:2014-02-04 19:12:16

标签: mysql sql optimization

也许我的头衔很模糊。因为我不知道我在寻找的是什么。

所以这是我的问题。

因为我的网站上的导航器是用两个表创建的。如下。

MainCategory
 -id
 -name
Category
 -id
 -name
 -maincategory
 -sub

当然,这两张桌子的复杂性不止于此,但这是我的问题的必要条件。

因此。我试图创建一个可以加载更快的新导航(希望我只用一个mysql调用就可以得到导航的内容)

每个类别都有一个maincategory字段,该字段是指向corect MainCategory的id,有时类别是类别的subCategory。

因此,如果它是一个子类或一个简单的类别,我试图为每个类别设置一行

这是我的mysql查询。

SELECT category.id AS id, category.name AS catName, maincategory.name AS mainCatName,     maincategory.id AS mainCatId, (
category.sub = category.id
) AS catSubName
FROM category
INNER JOIN maincategory ON ( category.maincategory = maincategory.id ) 

但是在catSubName字段中我需要category.id的名称

使用我试图放入的查询我有这个输出 enter image description here

我想要的是相同的输出,但在字段catSubName中改为使用categoryname。现在我所有类别只有0。

假设catName“Cleaning Supplies”(742)是“Others”的子类别(743) 然后在“catSubName”742的字段“id”中我想要catName 743的字符串“Other”

catSubName的conent应该是category.sub的category.name,它等于category.name所在的category.id ..:S

我希望这可以解决一些令人困惑的问题。 :S

感谢您的任何意见!

1 个答案:

答案 0 :(得分:1)

由于您的评论建议类别是递归层次结构,其中sub指的是同一个表中子类别的id,您应该使用:

SELECT c.id AS id,
       c.name AS catName,
       m.name AS mainCatName,
       m.id AS mainCatId,
       s.name AS catSubName
FROM category c
     INNER JOIN maincategory m ON ( c.maincategory = m.id ) 
     LEFT OUTER JOIN category s ON (c.sub = s.id)

我在这里使用了外部联接 - 即使该类别没有子类别也能提供结果。但我不确定您的数据库设计是如何的,因此可能需要进行调整。