也许我的头衔很模糊。因为我不知道我在寻找的是什么。
所以这是我的问题。
因为我的网站上的导航器是用两个表创建的。如下。
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的名称
使用我试图放入的查询我有这个输出
我想要的是相同的输出,但在字段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
感谢您的任何意见!
答案 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)
我在这里使用了外部联接 - 即使该类别没有子类别也能提供结果。但我不确定您的数据库设计是如何的,因此可能需要进行调整。