嵌套/递归MySQL查询

时间:2012-01-22 22:01:34

标签: php mysql database recursion nested

我有一个名为foo的数据库表。它有以下几个领域:

  • ID
  • 名称
  • parentId的

它可以深入3级,如下所示:

  • Foo 1(parentId:0)
    • Foo 2(parentId:1)(foo的孩子1)
      • Foo 3(parentId:2)(foo1和foo2的孩子)

现在的问题是,在我的用户表中,有一个名为fooId的字段。我希望得到属于顶级foo的所有用户。

例如,如果用户的fooId是3,并且我想让所有用户都与fooId 1相关(来自上面的示例),则应该在结果中计算该用户。

如果只有两个级别,我可以这样做:

`SELECT stuff FROM users, foo WHERE foo.parentId = '1' AND user.fooId = foo.id

但是我怎么能在目前的情况下这样做呢?

2 个答案:

答案 0 :(得分:1)

我确信我的逻辑在某些方面已被搞砸......但它可能会让你朝着正确的方向前进

SELECT stuff 
FROM users, foo
WHERE (foo.parentId = '1' AND user.fooId = foo.id) 
OR user.fooId IN (
  SELECT fooid from foo where parentID IN (
    SELECT fooid from foo where parentID = '1'
  )
)

答案 1 :(得分:1)

可能是这样的......

SELECT stuff FROM users, foo WHERE foo.parentId = '1' AND user.fooId = foo.id UNION SELECT stuff FROM users WHERE fooId = '3'

编辑: SELECT stuff FROM users, foo WHERE foo.parentId = '1' AND user.fooId = foo.id UNION ALL SELECT stuff FROM users WHERE fooId = '3'

相关问题