|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Bonjour à tous, je suis assez prolifique en post en ce moment car je commence un grand projet, mais j'essai de compenser en aidant dès que j'en suis capable.
Bref, j'ai une architecture de bdd tel: table1: id,blabla, url table2: id, blabla, url, #id_table1 et j'ai Xprofondeurs (ce sont des fichiers et dossiers) quand je supprime un dossier, il faudrait que tous ses fils de supprime, ça j'ai pu remarquer qu'on peut le faire en spécifiant à la table que si la clef étrangère n'existe plus l'entrée se supprime. ( arrêtez moi si je me trompe). Par contre par exemple dans l'url, ça pointe sur un fichier ou dossier qu'il faudrait que je supprime aussi. Alors j'ai pensé à un trigger qui ferait une sorte de "unlink()" mais sincèrement je ne sais pas comment m'y prendre sachant que l'un est sur du sql et l'autre sur du php. Merci de m'éclairer de vos précieux conseils !
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#2 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Hello
Les deux aspects sont effet séparés. Il faut d'abord détruire l'entrée correspondant au fichier dans SQL (et ses fils, voir delete en cascade sur les table InnoDB) et si la suppression s'est faite correctement, supprimer le fichier qui correspondait à cette entrée (et ses fils) sur le système de fichier via PHP. En tout cas, même s'il est théoriquement possible d'exécuter des unlink via MySQL (voir la commande system: http://dev.mysql.com/doc/refman/5.0/...-commands.html) en utilisant un trigger (je doute de la faisabilité là) ou une procédure stockée, je te le déconseille fortement car, contrairement au comportement de PHP, MySQL ne dispose pas de fonctions natives pour faire ça et donc il sera impossible de savoir si un fichier à été correctement supprimé ou non (et je ne parle pas des problèmes de droits). Pour ce qui est de ta structure de base de données, tes tables sont incorrectes car la relation qui lie la table 2 à la table 1 devrait en réalité s'exprimer sous forme d'une relation 1-n de la table 1 sur elle-même. Voici un article qui fait le tour de la manipulation des arbres sur des bases de données relationnelles: http://dev.mysql.com/tech-resources/...ical-data.html
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Le même article (enfin le même concept) en français : http://sqlpro.developpez.com/cours/arborescence/
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Salut, merci de ta réponse.
Je vois ce que tu veux dire, mais étant donné que j'ai en fait une table fichier et une table dossier, que les champs ne sont foncièrement pas les mêmes et que ça peut m'éviter certains traitement lors d'un display. J'ai trouvé plus judicieux de séparer les deux. Ai je tort ? Pour ce qui est de la suppression, je veux bien supprimer avec php, le seul soucis c'est que php n'est pas au couran de qui se supprime en cascade ! je supprime un dossier contenant un dossier contenant deux dossier contenant deux fichiers et trois dossiers etc.... La seule solution serait-elle de faire un parcours récursif de tout les fils et petits fils de mon noeud dossier, de stocker ça dans un tableau php et supprimer ligne par ligne ?
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Citation:
En revanche tu peux avoir une seconde table contenant des infos supplémentaires pour les fichiers. Le problème de ta méthode actuelle c'est que plus ton arborescence va se complexifier plus ton système va ralentir. Si tu atteint de grande profondeur tu vas te retrouver avec des successions de requête assez violente. Citation:
--edit -- Pour la suppression lit l'article que j'ai linké (ou celui en anglais) tu verras qu'en une seule requête on peut supprimer un sous arbre (donc tous les fils d'un noeud) |
||
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
J'ai tout lu avec attention, cette méthode est vraiment séduisante, j'aimerai quand même me passer des procédures stockées que je ne maîtrise absolument pas et faire tout ça dans un objet sur mon php.
Le seul soucis c'est que ne vois pas le déplacement d'un fils/nœud dans un autre nœud sur les requête en exemple. ----edit---- Suis je bête...un insert et un delete feront forcément l'affaire non ? et si je comprend bien une suppression ou un ajout vers la racine, donneront systématiquement lieu à un accès à l'ensemble des entrées de la table... c'est pas trop gourmand ? sachant que je vais sans doute avec des milliers d'entrées. ----- Après pour mon soucis de suppression le problème reste le même, sauf que la récupération des url à supprimer sera plus rapide.
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#7 | ||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Citation:
Citation:
Citation:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||
|
00
|
|
|
#8 | |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Citation:
D'après ce que je vois, ça supprime une par une les entrées qui correspondent à l'intervale donné, puis ça accède à toute les entrées voisines au noeud pour leur affecter un nouvel intervale.
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
|
00
|
|
|
#9 | ||||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
En mysql, si tu utilise InnoDB, tu peux avoir des clés étrangères sous forme de références. Ces références peuvent avoir un impact sur la suppression d'un tuple comme SET NULL, CASCADE ou NO ACTION.
Doc: http://dev.mysql.com/doc/refman/5.5/...nstraints.html Code :
Code :
Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||||
|
00
|
|
|
#10 | |||
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Citation:
Citation:
Citation:
|
|||
|
00
|
|
|
#11 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
DF: Dépendance Fonctionnelle. http://en.wikipedia.org/wiki/Functional_dependency
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#12 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
Ok merci les gars, donc pou récapituler et répondre à ma question du début pour peut être d'autres personne plus tard.
Modélisation intervallaire. Pour la suppression d'un élément je fais d'abord un select sur son intervalle pour récupérer toutes les url à supprimer en destination de php, puis je fais un delete de ce même intervalle, puis j'update les bords droit et gauche du reste de l'arbre. Si jamais y'a une incohérence n'hésitez pas. Je le passe en résolu
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
|
|
#13 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
00
|
|
|
#14 | |||
|
Expert Confirmé
![]() Olivier Développeur Web Inscription : août 2003 Messages : 1 837 ![]() |
Citation:
Code :
|
|||
|
00
|
|
|
#15 |
|
Membre confirmé
![]() Ingé. Info. Inscription : janvier 2008 Messages : 338 ![]() |
...
Enfait je suis complètement idiot! Evidemment ! bon même si ça m'as permis de réfléchir et trouver une solution plus adéquate pour ma bdd. Une suppression récursive à partir du dossier cible directement en php... Le truc tout simple... parfois on cherche trop compliqué pour rien.. Merci encore
__________________
Memento Quia Pulvis Es, Et In Pulverem ReverteriS |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com