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

Requêtes MySQL Discussion :

SELECT CASCADE comme DELETE CASCADE ?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut SELECT CASCADE comme DELETE CASCADE ?
    Hello
    je me demandais s'il existait un moyen simple de faire un "SELECT CASCADE",
    grace au cles etrangeres ...

    donc comme on fait un DELETE CASCADE, pouvoir choper en une requete tous les fils des fils des fils ...

    Merci

    Serge Hipontoise

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Non.

    Le SELECT doit être explicite. Celui qui crée la requête est censé connaître la structure de la BDD et donc les associations entre les tables qui conduisent à l'existence des clés étrangères.

    Il y aurait peut-être une solution en interrogeant INFORMATION_SCHEMA mais ça sent l'usine à gaz !

    Pourquoi veux-tu faire cela ? Fainéantise d'écrire des requêtes avec de multiples jointures ?

    Tu peux par contre faire des vues dans la BDD et requêter ces vues dans ton programme utilisateur. Le développeur a ainsi l'impression d'interroger de simples tables alors que derrière il peut y avoir une vue comprenant plusieurs jointures entre tables. La bonne pratique de développement conseille d'ailleurs de faire ainsi pour masquer la structure de la BDD au programme utilisateur et le rendre indépendant d'éventuels changements de structure.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci de ta réponse !

    Citation Envoyé par CinePhil Voir le message
    Pourquoi veux-tu faire cela ? Fainéantise d'écrire des requêtes avec de multiples jointures ?
    Pour éviter justement de faire de multiples requêtes avec une récursivité
    je me disais qu'une seule requête serait moins lourde
    au final je me demande si faire une seule requête sur toutes mes catégories puis traiter la récursivité de qui est père et fils de qui sur un tableau des résultats dans le script php
    en fait je cherche la meilleure solution, la plus légère autant pour le serveur que le client

    Citation Envoyé par CinePhil Voir le message
    Tu peux par contre faire des vues dans la BDD et requêter ces vues dans ton programme utilisateur. Le développeur a ainsi l'impression d'interroger de simples tables alors que derrière il peut y avoir une vue comprenant plusieurs jointures entre tables. La bonne pratique de développement conseille d'ailleurs de faire ainsi pour masquer la structure de la BDD au programme utilisateur et le rendre indépendant d'éventuels changements de structure.
    j'ai utilisé des années MySql un peu comme ça et là j'essaie de me former justement aux bonnes pratiques les plus efficaces
    je ne connais pas encore les vues

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si tu donnes la structure de tes tables, l'expression de ton besoin réel, un petit jeu de données et le résultat attendu, on pourra t'aider à trouver la bonne requête et/ou la meilleure solution.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Si tu donnes la structure de tes tables, l'expression de ton besoin réel, un petit jeu de données et le résultat attendu, on pourra t'aider à trouver la bonne requête et/ou la meilleure solution.
    Cat_id
    Cat_name
    Cat_Parent (foreign key)

    sachant que toutes les categories peuvent avoir une catégorie parent ou enfant, je veux pouvoir afficher la liste complete, par exemple dans un menu deroulant de selection de la catégorie pour un article, avec l'indentation pour que ce soit clair quelle catégorie appartient à laquelle

    • Félins
      • Chats
        • Chats de Birmanie
          • Couleur du poil
            • Blanc
            • Tigré
        • Chats de gouttière
      • Lions
      • Jaguar
    • Canins
    • Poissons


    sachnat que je peux bien sur avoir a gerer un nombre infini de categories et sous catégories

    Bien sur j'imagine que l'on pourrait aussi avec ajax ne faire la requête de la sous catégorie QUE si on clique dessus par exemple
    Mais est-ce ça le plus léger pour le serveur ?
    en imaginant bien sur que l'aie un traffic énorme et que je risque de devoir gerer enormement de connexions simultanées

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et le problème est que tu as choisi MySQL... qui ne connait pas les requêtes récursives !

    Donc pas trop de solution en dehors de la récursivité faite par le programme client, ou par une procédure SQL mais pas sûr que ce soit plus facile.

    Tu peux aussi t'intéresser à la modélisation d'arbre proposée par SQLPro.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bien sur j'imagine que l'on pourrait aussi avec ajax ne faire la requête de la sous catégorie QUE si on clique dessus par exemple
    Mais est-ce ça le plus léger pour le serveur ?
    en imaginant bien sur que l'aie un traffic énorme et que je risque de devoir gerer enormement de connexions simultanées

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si l'arbre est très grand, il peut en effet être plus efficace de ne requêter que le premier niveau et de déployer les niveaux intermédiaires que par Ajax qui lance à chaque fois une nouvelle requête.

    Les SGBD sont quand même prévus pour encaisser beaucoup de requêtes par seconde, la plupart étant exécutées en une fraction de seconde dans une base de donnée bien conçue et bien indexée. En comparaison, un utilisateur va peut-être faire 3 ou 4 requêtes en 2 ou 3 secondes en dépliant le menu jusqu'au niveau qu'il souhaite atteindre puis en fera plus rien le temps qu'il lise l'information obtenue.
    Si l'arbre est grand et qu'il faut l'importer en entier à chaque page, ça peut ralentir l'affichage de la page en chargeant inutilement le browser.

    À titre de comparaison, j'avais eu à programmer une liste déroulante contenant les plus de 36000 communes françaises et ma page mettait plusieurs secondes à s'afficher ou plantait carrément. Un coup de ZendX_Jquery pour alimenter dynamiquement la liste déroulante au fur et à mesure de la saisie des premières lettres de la commune par l'utilisateur et le temps d'affichage était redevenu satisfaisant.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci CinePhil

Discussions similaires

  1. On update cascade / on delete cascade
    Par bilred dans le forum SQL
    Réponses: 5
    Dernier message: 16/12/2008, 08h47
  2. SQL Delete Cascade
    Par mschoum dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/06/2006, 14h18
  3. [SQL 2K5] Pb : ON DELETE CASCADE : référence circulaire
    Par n00bi dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 29/05/2006, 08h48
  4. [SQL2K] delete cascade d'une table sur elle même
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2006, 16h28
  5. Delete cascade --> problème de temps de traitement
    Par celine31 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 11/01/2006, 12h03

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