Иерархические запросы в MySQL

Я пытаюсь найти всех родителей, дедушек и бабушек и т.д. определенного поля с любой глубиной. Например, учитывая приведенную ниже структуру, если я предоставляю 5, возвращаемые значения должны быть 1, 2, 3 и 4.

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

Как мне это сделать?

Ответ 1

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

Ответ 2

Следующий ответ - это не только MYSQL, но и PHP. Этот ответ может быть полезен для всех тех, кто попадает на эту страницу во время их поиска (как и я), но не ограничивается только использованием MYSQL.

Если у вас есть база данных с вложенной структурой неизвестной глубины, вы можете распечатать содержимое с помощью рекурсивного цикла:

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

Эта функция также может быть переписана на любом другом языке, таком как Javascript.