Ответ 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
Я пытаюсь найти всех родителей, дедушек и бабушек и т.д. определенного поля с любой глубиной. Например, учитывая приведенную ниже структуру, если я предоставляю 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. Этот ответ может быть полезен для всех тех, кто попадает на эту страницу во время их поиска (как и я), но не ограничивается только использованием 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.