Alle untergeordneten Knoten, Enkelknoten usw. unter Eltern über PHP mit den Ergebnissen der MySQL-Abfrage abrufen

8

Ich habe versucht, das herauszufinden, aber ich bin nirgendwohin gekommen. Hoffentlich kann jemand zu meiner Rettung kommen.

Mein Problem ist, dass ich das Adjazenzlisten-Datenmodell verwende, um meine Hierarchiedaten in mysql zu erzeugen. Ich kann die Tabelle (siehe unten) in ein Multidimension-Array mit assoziativem Array für jedes Element zurückholen. Was ich tun möchte, ist, sobald ich dieses Array bekomme, möchte ich ein anderes Array mit allen Knoten (Kind, Enkel usw.) unter einer Eltern-ID (einschließlich der Eltern-Artikel) bekommen. Ich kann einfach nicht trainieren, wie man Tihs einprogrammiert php.

In MySQL erscheint meine Tabelle wie folgt:

%Vor%

Ich kann alle Zeilen mit diesem Code in einem assoziativen Array mit diesem abfragen.

%Vor%

Erhält Ergebnisse:

%Vor%

Mit diesen Ergebnissen möchte ich es mit einer ID filtern.

Sagen Sie zum Beispiel, ich wollte ein assoziatives Array von jedem Knoten unter Portable Electronics mit der ID 3. (ID für den Code verwenden)

Es würde ein Array mit Zeilen mit IDs zurückgegeben:

  • 3 Tragbare Elektronik (ausgewählter Elternteil muss enthalten sein)
  • 7 Mp3-Spieler (Kind)
  • 8 CD-Spieler (Kind)
  • 9 2-Wege-Radios (Kind)
  • 10 Flash (Großartiges Kind)

Wenn Flash Kinder hatte, würde es auch diese zurückgeben.

Also würde das Endergebnis ein Array wie das obige aber nur mit diesen Elementen zurückgeben.

Bitte beachten Sie:  Ich bin nicht nach einer Funktion, die ein Multidimension-Array der Baumstruktur erstellt (bereits eine Lösung dafür) .Ich möchte eine Funktion erstellen: fetch_recursive ($ ID), die eine ID erhält und alle Elemente in dieser Ebene und zurückgibt in den Ebenen unter etc etc.

Hoffe, das hilft

Vielen Dank im Voraus

    
Benny33 16.07.2012, 01:44
quelle

2 Antworten

16

Bearbeiten:

Ich hatte zuvor eine Lösung gepostet, um ein mehrdimensionales Array aus der Ausgabe zu erstellen, die Sie angegeben haben, sowie eine Möglichkeit, alle untergeordneten Elemente einer bestimmten id aus diesem bestimmten Array herauszuholen. Ich habe jetzt herausgefunden, wie man die untergeordneten Elemente direkt von der Ausgabe abruft (ohne zuerst eine Funktion buildtree() durchlaufen zu müssen:

) %Vor%

Um die obige Funktion zu verwenden, übergeben Sie einfach das Ausgabe-Array $data an das erste Argument und das id , an dem Sie die untergeordneten Elemente abrufen möchten, im zweiten Argument:

Beispiel:

%Vor%

Was Ihnen die richtige Array-Struktur für id 3 geben sollte (wie im Beispiel in der letzten Codebox zu dieser Antwort zu sehen).

Ursprüngliche Antwort:

Ich war noch nie dazu gekommen, eine rekursive Funktion zu schreiben, um bisher verschachtelte Bäume aus diesem Design zu bauen. Ich bin mir sicher, es gibt viele andere, die ähnliche Funktionen geschrieben haben, aber diese sollte auf jeden Fall für Sie arbeiten:

%Vor%

Diese Funktion wird rekursiv einen Baum aus einer Adjazenzliste erstellen und die IDs in aufsteigender Reihenfolge geordnet halten. Dies macht auch die id aller Eltern / Kinder zum Schlüssel jedes Informationsfeldes.

Dieser Code:

%Vor%

Gibt etwas wie folgt aus:

%Vor%

Um alle untergeordneten Knoten eines bestimmten id auf ein eindimensionales Array zu bekommen, können Sie diese Funktion verwenden:

%Vor%

Ausgehend von der obigen Funktion buildtree() möchten wir sagen, dass wir alle untergeordneten Knoten von id 3:

erhalten möchten %Vor%

Dies wird ausgegeben:

%Vor%     
Zane Bien 16.07.2012, 03:16
quelle
0

Hier ist eine Möglichkeit, Sie weiter zu bringen, und Sie können entscheiden, wie Sie Ihr Ergebnis-Array erstellen und welche Felder Sie einschließen möchten. Dies wird nicht getestet, aber Sie sollten die Logik sehen.

%Vor%     
Mike S. 16.07.2012 03:12
quelle

Tags und Links