Poster une réponse à un sujet: SQL - Récursivité (sort of)
Attention, ce sujet est un sujet ancien (3095 jours sans réponse)
Gras [b]Texte[/b] Italique [i]Italique[/i] Souligné [u]Souligné[/u] Barré [strike]Barré[/strike]
Courriel [email=nobody@nobody.org]Nom[/email] Lien [url=http://www.website.com]Texte[/url] Ancre [anchor]Nom[/anchor] Image [img]http://www.website.com/image.jpg[/img] Insérer une image en provenance du site
Aligné à gauche [align=left]Texte[/align] Centré [align=center]Texte[/align] Aligné à droite [align=right]Texte[/align] Toute la largeur [align=justify]Texte[/text]
Couleur [color=#000000]Text[/color] Mise en forme [highlight=pascal]Texte[/highlight] Widgets Emoticons :code: [:code] Convertisseur HTML vers BBCode Convertisseur Word vers BBCode
Prévisualisation Vérification de l'orthographe

Copier Coller Couper Tout sélectionner
Tout effacer Insérer la date Insérer l'heure Insérer la date et heure Insérer votre IP
Liste [list=square][item]BlaBla[/item][/list] Liste Numérotée [list=decimal][item]BlaBla[/item][/list]
Citation [quote=name]Texte[/quote] Spoiler [spoiler]James est le meurtrier![/spoiler]
Tout en majuscules [uppercase]Texte[/uppercase] Tout en minuscules [lowercase]Texte[/lowercase] l33t [l33t]Je suis un nerd[/l33t] Texte en indice [sub]Texte[/sub] Texte en exposant [sup]Texte[/sup] Taille du texte [size=8]Texte[/size]
 
Pinou
Pas mal comme solution.
Je n'avais jamais utilisé de CTE avec UNION ALL.
Je viens de l'appliquer dans une DB pour améliorer requête moins propre et légèrement buguée.

Mais puisque tu n'en a plus besoin, j'ai pas trop le courage d'essayer de le refaire pour ta tale de recette. :smile:
Schnick
Il apprécie pas les guillemets. Mais c'est amusant qu'en prévisionnage çà passe. :bombe:
zion
c'est [url = lelien ] plop [ / url ]
Schnick
Bonsoir,

Je pense que la réponse se trouve au moins à cette adresse: http://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query

Il y a bcp d'autres exemples. Le mots clés sont: mysql requête récursive arborescence


Oui j'ai commencé par Google et donc ici ou mais n'étant pas un expert je me suis retrouvé bloqué. Je n'arrive pas à appliquer les exemples à mon cas pratique.

Bon, sachant que je devais mettre les données à disposition d'un cube cognos, je vais les donner en l'état et c'est lui qui va s'occuper de la récursivité. Donc problème résolu pour le client.

Mais je vais quand même essayer de trouver comment faire. :banzai:

EDIT : c'est marrant dans la prévisualisation le lien fonctionne mais pas dans l'affichage final :roll:
philanthrope
Bonsoir,

Je pense que la réponse se trouve au moins à cette adresse: http://stackoverflow.com/questions/20215744/how-to-create-a-mysql-hierarchical-recursive-query

Il y a bcp d'autres exemples. Le mots clés sont: mysql requête récursive arborescence
Schnick
T'as pas des millions de recettes, si?

Ce que je ferais, un array statique, pour taille le plus grand id de recette. Ca va bouffer qqs KB de mémoire, pas grave. Tu y charges chaque recette avec un array pour les ingrédients, et un array pour les ids des sous recettes.

Puis, tu te fais un array avec les produits, tous à 0, même chose, de la taille du plus grand id, avec ce que tu as besoin pour ton rapport déjà lié (le nom du produit, etc).

Puis tu fais simplement ton query des ventes, et pour chaque ligne, tu parcours ton array.

Je te promets que ce sera ultra rapide, même avec des dizaines de milliers de rows, vu que tu t'indexes toi même ton truc grâce à tes ids.

Sinon tu peux le faire en SQL pur, mais vu que tu as pas de certitude de ton degré de récursivité, soit tu t'en forces un, soit t'es parti pour la gloire.


L'idée est séduisante, faut juste que je me renseigne sur le comment faire un array. :banzai:

Puis faut des arrays deux dimensions, recette | sous recette et recette | ingredients, non. Sinon je parcourerais un table sans référence à la recette et je ne saurai pas faire le lien entre le produit et la recette.
Pinou
OK, donc en effet, j'avais rien compris :tinostar:
Je pensais que tu voulais sortir la liste de "toutes les recettes composées uniquement d'ingrédients."

Je vais relire pour essayer de comprendre.
zion
T'as pas des millions de recettes, si?

Ce que je ferais, un array statique, pour taille le plus grand id de recette. Ca va bouffer qqs KB de mémoire, pas grave. Tu y charges chaque recette avec un array pour les ingrédients, et un array pour les ids des sous recettes.

Puis, tu te fais un array avec les produits, tous à 0, même chose, de la taille du plus grand id, avec ce que tu as besoin pour ton rapport déjà lié (le nom du produit, etc).

Puis tu fais simplement ton query des ventes, et pour chaque ligne, tu parcours ton array.

Je te promets que ce sera ultra rapide, même avec des dizaines de milliers de rows, vu que tu t'indexes toi même ton truc grâce à tes ids.

Sinon tu peux le faire en SQL pur, mais vu que tu as pas de certitude de ton degré de récursivité, soit tu t'en forces un, soit t'es parti pour la gloire.
Schnick
Je dois sortir des ventes par ingrédient au final de mon rapport.
J'ai un table avec les ventes de produits : x steak
Je dois avoir : x tranches steak, x grammes de haricots, etc.

EDIT : La table des ventes n'est évidemment pas la même que la table contenant les lignes de recettes.

Compter je veux bien mais je n'arrive pas à faire le saut (intellectuel) de comment va être pris en compte la recette de recette de recette de recette. Je ne peux pas compter le nombre d’occurrences puisque chaque recette peut être rappelée par n'importe quelle autre recette.

Mais c'est peut-être moi auquel il manque une case :smile:
zion

J'espère que c'est plus clair.



Non :ddr555:
Catégorie:  






Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?