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
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
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 !
Merci de ta réponse !
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
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
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 !
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
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 !
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
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 !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager