To
strona ma naprawdę fajny przegląd różnych metod przechowywania danych hierarchicznych w mysql i PHP. Aby odpowiedzieć na Twoje pytanie, najłatwiej jest użyć php i rekursji. Istnieją inne metody, których możesz użyć, takie jak modified preorder transversal
, które nie wymagają wielu zapytań do bazy danych. Ale ta metoda może być bardziej złożona do wdrożenia, gdy mamy do czynienia z wieloma wstawkami i aktualizacjami.
Inną naprawdę fajną metodą i moją ulubioną jest tak zwana „tabela zamykania” / „relacja sąsiedztwa” wspomniana w Jaki jest najbardziej wydajny/elegancki sposób przetworzenia płaskiego stołu na drzewo?
Jeśli chodzi o Twój komentarz, zasadniczo musisz utworzyć pętlę lub funkcję rekurencyjną, która wybiera rodzica Chicago, a następnie rodzica rodzica i tak dalej.
$stack = array();
$parent = 3;
while($parent != 0){
$data = (put your mysql to get the row with parentID = $parent)
$parent = data['parentID'];
$stack[] = $data;
}
$stack = array_reverse($stack);
Stos będzie wtedy zawierał rodziców Chicago (tj. lokalizacja, USA)