MySQL中的分层查询

我试图find任何深度的特定领域的所有父母,祖父母等。 例如,给定以下结构,如果我提供5,返回的值应该是1,2,3和4。

| a | b | ----------- | 1 | 2 | | 2 | 3 | | 3 | 4 | | 4 | 5 | | 3 | 6 | | 4 | 7 | 

我将如何做到这一点?

 SELECT @id := ( SELECT senderid FROM mytable WHERE receiverid = @id ) AS person FROM ( SELECT @id := 5 ) vars STRAIGHT_JOIN mytable WHERE @id IS NOT NULL 

以下答案不是MYSQL,而是使用PHP。 这个答案对于所有在search过程中结束的人来说都是有用的(就像我一样),但不仅限于使用MYSQL。

如果您的数据库具有未知深度的嵌套结构,则可以使用recursion循环打印出内容:

 function goDownALevel($parent){ $children = $parent->getChildren(); //underlying SQL function if($children != null){ foreach($children as $child){ //Print the child content here goDownALevel($child); } } } 

这个函数也可以用Javascript等其他语言重写。