MySQL Nested Sets - Wie finde ich Elternknoten?

8

Ich habe Ihren Lauf der geschachtelten Set Hierarchie-Setup mit den folgenden Spalten:

Tabellenname:

%Vor%

Spalten:

%Vor%

Kennt jemand eine Abfrage, um das Elternteil eines Knotens zu bestimmen?

Ich habe ein paar Stellen gelesen, dass es praktisch ist, eine parent_id Spalte in Ihrer Tabelle zu haben, um dies zu verfolgen, aber es scheint redundant zu sein und es scheint, als könnte es mit dem verschachtelten nicht mehr synchron sein Wird gesetzt, wenn eine Abfrage beim Hinzufügen / Entfernen / Verschieben von Elementen innerhalb des Sets falsch ausgeführt wurde.

    
Jake Wilson 21.10.2009, 18:06
quelle

8 Antworten

17

Sehen Sie sich diese Frage an . Es ist ähnlich wie bei Ihnen. Ich habe dort eine Frage gestellt, die Sie brauchen könnten.

%Vor%

Ich hoffe, da ist was du brauchst.

Für die folgende Tabelle:

%Vor%

es erzeugt die Ausgabe:

%Vor%     
Lukasz Lysik 21.10.2009, 18:10
quelle
14

TOP ist ein MSSQL-Befehl, verwenden Sie LIMIT für MySQL:

%Vor%

Sollte den Trick machen ..

    
forch 23.08.2010 14:59
quelle
3

nur um diese Antworten hinzuzufügen, die mir sehr geholfen haben,

Ich musste in einigen Fällen das direkte Elternelement eines Knotens sowie das oberste übergeordnete Element einer Knotenkette finden,

Ich habe Folgendes als Basis verwendet, um die Elemente in der Reihenfolge Kind-zu-Eltern zu erhalten

%Vor%

es ist dann eine Frage des Hinzufügens von LIMIT 1,1 , um nur die zweite Zeile zu erfassen, die das unmittelbare Elternteil wäre

Es sollte auch angemerkt werden, dass bei der obigen Abfrage, wenn der Knoten selbst der oberste Elternteil der obersten Ebene ist, er kein unmittelbares Elternteil hätte, also mit LIMIT 1,1 sollte er zurückgeben leere Ergebnismenge

Um das oberste übergeordnete Element zu erhalten, habe ich die order by-Klausel umgekehrt, eine Überprüfung vorgenommen, ob der Knoten selbst das oberste übergeordnete Element ist, und das Ergebnis auf die erste Zeile beschränkt

%Vor%

In der letzten Abfrage habe ich die >= <= -Operatoren verwendet, so dass der ausgewählte Bereich den untergeordneten Knoten umfasst, wenn er auch der oberste übergeordnete Knoten ist

    
vurentjie 29.03.2013 00:12
quelle
2

Ich hatte ein Problem mit Lucasz 'Anfrage. Meine Version von mysql hat den Befehl TOP nicht verstanden. Ich musste stattdessen LIMIT verwenden. Hier ist der überarbeitete Code.

%Vor%

Ändere das Zeug in den [] natürlich ganz nach deinen Bedürfnissen. Entferne auch die [] 's. Diese Abfrage gibt nur eine Zeile zurück. Wie so ...

%Vor%     
mrbinky3000 04.01.2010 03:22
quelle
1
%Vor%     
uksioo 11.06.2013 18:25
quelle
0

Alle Vorfahren werden von

zurückgegeben %Vor%

Also ist das direkte Elternteil der Vorfahre mit dem geringsten Unterschied zwischen lft und rgt.

%Vor%     
dnagirl 21.10.2009 18:13
quelle
0
%Vor%

Sie können eine max-Anweisung anstelle der order / limit-Anweisung verwenden und benötigen möglicherweise ein anderes Schlüsselwort, um die Ergebnisse abhängig von Ihrer Datenbank auf eine Zeile zu beschränken. Zwischen eher als & lt; und & gt; würde funktionieren, wenn Ihre Datenbank den exklusiven Satz zurückgibt, was MySQL nicht tut.

    
Eelco 08.06.2011 17:53
quelle
0

Der Code von spankmaster79 war nicht völlig falsch. Ich habe seinen Code geändert und es hat funktioniert.

%Vor%     
jackson 17.12.2010 10:54
quelle

Tags und Links