Иерархические запросы в MySQL - PullRequest
11 голосов
/ 12 ноября 2011

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

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

Как бы я это сделал?

Ответы [ 2 ]

24 голосов
/ 13 ноября 2011
SELECT  @id :=
        (
        SELECT  senderid
        FROM    mytable
        WHERE   receiverid = @id
        ) AS person
FROM    (
        SELECT  @id := 5
        ) vars
STRAIGHT_JOIN
        mytable
WHERE   @id IS NOT NULL
0 голосов
/ 24 января 2014

Следующий ответ не только для 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.

...