Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1425 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL]delete sur une arborescence

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL]delete sur une arborescence

n°1352703
Djebel1
Nul professionnel
Posté le 24-04-2006 à 14:36:24  profilanswer
 

Hello,  
 
j'ai une table avec une structure arborescente : chaque élément connait l'id de son parent. La "racine" de l'arbre a un id de parent qui vaut 0.
 
Lorsque je détruis un élement de cet arborescence, je veux détruire tous ses "descendants". Je pensais faire un trigger, qui, quand je détruis un élément, va détruire en cascade tous les éléments enfants. J'ai fait ça :  

Code :
  1. create trigger deleteEnCascade before delete on hierarchie
  2. for each row delete from hierarchie where old.parentId = old.elementId;


Bien sur ça marche pas, je ne peux pas faire référence au nom de la table dans l'instruction du trigger :  

Code :
  1. ERROR 1442 (HY000): Can't update table 'hierarchie' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.


 
Je pensais mettre une FK sur le parent. On ne peut pas placer une FK dépendant de sa propre table.
 
Je pensais faire une procédure stockée récursive, MySQL ne les gère pas :x
 
Comment faire ? Vais-je être obligé de faire ça côté application ? Quelqu'un a une autre solution ?


Message édité par Djebel1 le 24-04-2006 à 17:32:03
mood
Publicité
Posté le 24-04-2006 à 14:36:24  profilanswer
 

n°1353735
Djebel1
Nul professionnel
Posté le 25-04-2006 à 16:32:00  profilanswer
 

tout le monde fait ça côté application ? :)

n°1353744
betsamee
Asterisk Zeperyl
Posté le 25-04-2006 à 16:41:05  profilanswer
 

quel est le format de tes tables?

n°1353818
Djebel1
Nul professionnel
Posté le 25-04-2006 à 18:23:43  profilanswer
 

innodb


Message édité par Djebel1 le 25-04-2006 à 18:24:04
n°1354319
Djebel1
Nul professionnel
Posté le 26-04-2006 à 14:00:00  profilanswer
 

si vous voyez pas comment faire autrement que dans l'application, dites le moi, jme sentirai moins con :D

n°1354349
mrbebert
Posté le 26-04-2006 à 14:24:49  profilanswer
 

Djebel1 a écrit :

si vous voyez pas comment faire autrement que dans l'application, dites le moi, jme sentirai moins con :D

Bon ben je le dis alors :D  
C'est jamais simple à gérer, ces arborescences :(  

n°1354358
darkfrost
Posté le 26-04-2006 à 14:35:57  profilanswer
 

Une solution, sans être sur qu'elle soit possible, tu crée une nouvelle table avec la même structure que Hierarchie. Cette table est vide.
Tu fais ton delete normal sur cette table, comme si il s'agissait de la table hierarchie, et la tu declenche ton trigger before qui vire les parents dans ta "vrai" table hierarchie et la ligne que tu veux supprimer.
 
Sinon tu passes par l'application :D !

n°1354364
Djebel1
Nul professionnel
Posté le 26-04-2006 à 14:42:03  profilanswer
 

oula paye ta bidouille :D
 
J'en viens à envisager la solution suivante :  
faire une table à part, contenant simplement l'ID d'un élément et l'ID de son père.
 
Sur la table principale, le delete d'un élément provoque la destruction de l'enregistrement correspondant dans la table à part. Ce delete provoque lui-même le delete de l'élément enfant dans la table principale.
Et ainsi de suite.
 
Ca parait pas mal ça non ?

n°1354381
Djebel1
Nul professionnel
Posté le 26-04-2006 à 15:05:00  profilanswer
 

bon en fait cette solution est miteuse, ça impliquerait de lever la contrainte de FK à chaque insertion dans la base, donc je trouve ça encore plus pourri que de devoir gérer le delete coté appli :D

n°1354408
betsamee
Asterisk Zeperyl
Posté le 26-04-2006 à 15:32:45  profilanswer
 

j aurais personnelement fait ca dans l'application

mood
Publicité
Posté le 26-04-2006 à 15:32:45  profilanswer
 

n°1354413
Djebel1
Nul professionnel
Posté le 26-04-2006 à 15:36:44  profilanswer
 

ouep, pas le choix j'ai l'impression, j'aurais préféré que ça soit la base qui gère ça, tant pis.
On attendra que MySQL sorte des proc stockées récursives


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL]delete sur une arborescence

 

Sujets relatifs
MySQL et BINARYRecherche avec une miste déroulante PHP/MySql
Création d'un database link en MysqlSauts de ligne pas pris en compte à l'affichage (avec MySQL)
Export BDD MySQL en XMLSe connecter à MySQL à distance en C#
[Résolu] Compteur avec cookie et Mysqlinsert et update anarchiques dans mysql ?
PHP/MySQL: requete de tri et LEFT JOINTraitement d'un fichier dans BDD Mysql
Plus de sujets relatifs à : [MySQL]delete sur une arborescence


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR