我有一张桌子,例子
catid | parentcatid | dirname
4 | 0 | mobiles
243 | 4 | Nokia
当我得到catid = 243
时,我需要使用mysql_query (catid=parentcatid)
243 | mobiles | Nokia
我可以先选择catid
,parentcatid
和dirname
id=243
,然后选择parentcatid = catid
,但
如何进行此单一查询?
答案 0 :(得分:5)
JOIN
两次:
SELECT
t2.catid, t1.dirname 'dirname', t2.dirname 'parentname'
FROM Tablename t1
INNER JOIN Tablename t2 ON t1.catid = t2.parentcatid
WHERE t2.catid = 243;
这会给你:
| CATID | DIRNAME | PARENTNAME |
--------------------------------
| 243 | mobiles | Nokia |
答案 1 :(得分:3)
使用自我加入:
SELECT parent.catid, parent.dirname
FROM yourtable AS parent
LEFT JOIN yourtable AS child ON (child.parentcatid = parent.catid)
WHERE child.catid = 243
答案 2 :(得分:0)
你的问题的字面答案是使用自我加入(如Marc B建议的那样)。
在线之间阅读,我假设您不知道您的层次结构将提前多深 - 这会使自我联接变得不那么有用,因为如果您必须继续加入以获得更深层次的树,如果不是树的所有部分都达到相同的深度,你可能需要使用外连接。
替代方法 - 更复杂,只有在我的假设成立时才这样做 - 是use a recursive function,或者将您的数据表示为nested set。