sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag rekursivt få det överordnade ID:t för rader i denna MySQL-tabell?

Detta webbplatsen har en riktigt bra översikt över de olika metoderna för att lagra hierarkisk data i mysql och PHP. För att svara på din fråga är det enklaste sättet att använda php och rekursion. Det finns andra metoder du kan använda såsom den modified preorder transversal , som inte kräver flera databasfrågor. Men den här metoden kan vara mer komplex att implementera när man hanterar många infogningar och uppdateringar.

En annan riktigt cool metod och min personliga favorit är den så kallade "closure table" / "adjacency relation" som nämns i Vad är det mest effektiva/eleganta sättet att analysera en platt tabell till ett träd?

När det gäller din kommentar måste du i princip göra en loop eller en rekursiv funktion som väljer föräldern till chicago, sedan föräldern till föräldern och så vidare.

$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 kommer då att innehålla föräldrarna till Chicago, (dvs. plats, USA)



  1. mysql är död men subsys låst

  2. mysql_fetch_assoc():det angivna argumentet är inte en giltig MySQL-resultatresurs

  3. MYSQL Case i select-satsen för kontroll av null

  4. SQL Row_Number()-funktionen i Where-sats