如何将2个mysql查询与1个表合并为一个

时间:2013-01-15 14:32:42

标签: php mysql sql database

我有一张桌子,例子

catid | parentcatid | dirname
  4   |      0      | mobiles 
 243  |      4      | Nokia

当我得到catid = 243时,我需要使用mysql_query (catid=parentcatid)

243 | mobiles | Nokia

我可以先选择catidparentcatiddirname id=243,然后选择parentcatid = catid,但

如何进行此单一查询?

3 个答案:

答案 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;

SQL Fiddle Demo

这会给你:

| 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