2011-01-10 6 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 | 
+--------+---------+-----------+-------+ 

Voici mon problème, chaque fois mysql insérer nouvelle ligne, je veux une valeur en root points au parent de niveau supérieur (valeur réellement root en quelque sorte liés à la valeur en parent_id).numéro de colonne automatique en fonction de l'autre colonne

Basé sur la table, la ligne avec un id = 5, un parent_id = 4, et rangée avec id = 4 ont PARENT_ID = 1, et rangée avec id = 1 ont parent = 0.So cette ligne se root = 1

Fondamentalement root valeur proviennent de cascade parent_id au niveau supérieur (jusqu'à parent_id = 0)

donc, en résumé, ce que je veux est, quand nouvelle ligne est d'insérer, Mysql attribuer autoamatically valeur pour root

Alors, est-ce que cela peut être fait?

Merci à l'avance

Répondre

1

Vous pouvez le faire facilement avec des déclencheurs:

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

je mettre à jour mon post avec ajouté info..Basically je ne peux pas simplement « id SELECT de ma_table où root est NULL », parce qu'il y a une autre ligne de la possibilité ont aussi 'root' = null. Comme je l'ai dit 'root' a sa valeur de cascader la valeur de' parent_id'. Est-ce que cela peut être fait? – slier

+0

@slier: mise à jour. Est-ce que c'est bien maintenant? – zerkms

+0

@zerkms son amende maintenant, thx mec..btw eu un lien je peux parler de déclencheur? – slier

Questions connexes