2011-01-10 13 views
0
+--------+---------+-----------+-------+ 
| id | title | parent_id | root | 
+--------+---------+-----------+-------+ 
| 1 | Lvl-1 |  0  | null | 
+--------+---------+-----------+-------+ 
| 2 | Lvl-2 |  0  | null | 
+--------+---------+-----------+-------+ 
| 3 | Lvl-11 |  1  | 1 | 
+--------+---------+-----------+-------+ 
| 4 | Lvl-12 |  1  | 1 | 
+--------+---------+-----------+-------+ 
| 5 | Lvl-121 |  4  | 1 | 
+--------+---------+-----------+-------+ 

Hier mein Problem ist, will jedes Mal mysql neue Zeile einzufügen, i einen Wert in root Punkt auf die oberste Ebene übergeordneten (eigentlich Wert in root irgendwie Wert in parent_id bezogen).Auto Spaltennummer auf der Grundlage anderer Spalte

basierend auf der Tabelle, Zeile mit einem id = 5, hat eine parent_id = 4 und Zeile mit id = 4 hat parent_id = 1 und Zeile mit ID = 1 hat parent = 0.So diese Zeile erhält root = 1

Grundsätzlich root Wert kommen aus parent_id auf der obersten Ebene Kaskadierung (bis parent_id = 0)

Also zusammenfassend, was ich will, ist, wenn neue Zeile Einsatz ist, Mysql autoamatically Wert zuweisen für root

So ist das möglich?

Vielen Dank im Voraus

Antwort

1

Sie können mit Triggern so leicht tun:

delimiter // 
CREATE TRIGGER update_root BEFORE INSERT ON my_table 
FOR EACH ROW 
BEGIN 
    SET NEW.root = (SELECT root FROM my_table WHERE id = NEW.parent_id); 
END; // 
delimiter ; 
+0

Ich habe meinen Beitrag mit zugesetztem info..Basically ich einfach "id SELECT FROM my_table WHERE Wurzel IS NULL" kann nicht aktualisiert werden, weil es eine andere Zeile gibt, haben Sie auch 'root' = null. Wie ich schon sagte "root" hat seinen Wert durch die Kaskadierung des Wertes von "parent_id". Kann dies getan werden? – slier

+0

@slier: aktualisiert. ist es jetzt in Ordnung? – zerkms

+0

@zerkms ist jetzt in Ordnung, thx dude..btw hat einen Link, den ich über Trigger beziehen kann? – slier

Verwandte Themen