IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Trigger sql unlink() ?


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut Trigger sql unlink() ?
    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 !

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    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

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le même article (enfin le même concept) en français : http://sqlpro.developpez.com/cours/arborescence/
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    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 ?

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    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 moi un dossier ou un fichier c'est la même chose , en tout cas dans une arborescence.
    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.

    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 !
    Pour lancer la suppression tu va bien à un moment donner cliquer sur quelques chose. C'est ce quelque chose qui va dire à PHP ce qui est supprimé.

    --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)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éclairé Avatar de Pymento
    Homme Profil pro
    Ingé. Info.
    Inscrit en
    Janvier 2008
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingé. Info.

    Informations forums :
    Inscription : Janvier 2008
    Messages : 366
    Par défaut
    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.

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    j'ai en fait une table fichier et une table dossier
    Sous unix, les dossiers sont des fichiers.

    @Grunk: En revanche tu peux avoir une seconde table contenant des infos supplémentaires pour les fichiers
    Les méta-inf sont en DF avec la clé de la table des fichiers... Ces infos doivent donc être dans cette table.

    Suis je bête...un insert et un delete feront forcément l'affaire non ?
    Le déplacement d'un noeud dans un arbre passe par le changement du noeud parent, donc avec une requête update.

    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
    Non. Encore une fois, regarde le mécanisme de suppression en cascade sur les tables InnoDB.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trigger SQL - Base SAGE
    Par Silvia12 dans le forum Développement
    Réponses: 9
    Dernier message: 13/12/2007, 09h47
  2. Problème Trigger SQL Server
    Par RodEpsi dans le forum Développement
    Réponses: 6
    Dernier message: 25/05/2006, 15h03
  3. JDBC et le Trigger SQL server
    Par fadex dans le forum JDBC
    Réponses: 2
    Dernier message: 01/05/2006, 23h25
  4. Attaquer une base externe à partir d'un trigger SQL Server
    Par stephpr44 dans le forum Développement
    Réponses: 5
    Dernier message: 29/10/2005, 15h40
  5. [Triggers SQL]
    Par Abdelmoumen dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/09/2005, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo