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

Hvordan kan jeg rekursivt få det overordnede ID for rækker i denne MySQL-tabel?

Dette hjemmeside har et rigtig fint overblik over de forskellige metoder til lagring af hierarkiske data i mysql og PHP. For at besvare dit spørgsmål er den nemmeste måde at bruge php og rekursion. Der er andre metoder, du kan bruge, såsom den modified preorder transversal , som ikke kræver flere databaseforespørgsler. Men denne metode kan være mere kompleks at implementere, når man har med mange indsættelser og opdateringer at gøre.

En anden rigtig fed metode og min personlige favorit er den såkaldte "closure table" / "adjacency relation" nævnt i Hvad er den mest effektive/elegante måde at parse en flad tabel til et træ?

Med hensyn til din kommentar skal du grundlæggende lave en løkke eller en rekursiv funktion, der vælger forælderen til chicago, derefter forælderen til forælderen og så videre.

$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 vil derefter indeholde forældrene til Chicago, (dvs. placering, USA)



  1. 10 nyttige tips om MySQL-indstilling af ydeevne

  2. Kan ikke oprette MySQL-trigger med TRIGGER-privilegium på 5.1.32

  3. Hvordan får jeg den maksimale værdi for et heltal i SQL?

  4. Ikke i stand til at oprette forbindelse til databasen efter nogle tidspunkter med udrulning på serveren