Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso ottenere ricorsivamente l'ID padre delle righe in questa tabella MySQL?

Questo il sito web ha una panoramica davvero interessante dei diversi metodi per la memorizzazione dei dati gerarchici in MySQL e PHP. Per rispondere alla tua domanda, il modo più semplice è usare php e la ricorsione. Ci sono altri metodi che potresti usare come il modified preorder transversal , che non richiedono più query di database. Ma questo metodo può essere più complesso da implementare quando si ha a che fare con molti inserimenti e aggiornamenti.

Un altro metodo davvero interessante e il mio preferito è la cosiddetta "tabella di chiusura" / "relazione di adiacenza" menzionata in Qual ​​è il modo più efficiente/elegante per analizzare un tavolo piatto in un albero?

Per quanto riguarda il tuo commento devi sostanzialmente creare un ciclo o una funzione ricorsiva che seleziona il genitore di chicago, quindi il genitore del genitore e così via.

$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);

Stack conterrà quindi i genitori di Chicago, (es. posizione, USA)