|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
Bonjour à tous,
je fais face à un problème que je n'arrive pas à résoudre. Voici la table est les données que j'utilise pour tester: Code :
Dans cette table, nous associons des commandes à des colis. Cependant, une commande peut être composée de plusieurs colis et un colis peut contenir plusieurs commandes. Je souhaiterais pouvoir récuperer toutes les commandes liées de près ou de loin à un colis passé en paramètre. Pour ce faire, j'ai trouvé la page suivante: http://msdn.microsoft.com/fr-fr/library/ms175972.aspx Cette page semble poser les bases de mon problème mais j'ai l'impression d'avoir besoin d'une double recursivité. voici ce que j'ai essayé de faire sans succès: Code :
En esperant que vous pourrez m'aider à surmonter cela, Merci. |
||||
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Si j'ai bien compris :
Code :
__________________
Email : http://scr.im/waldar |
||
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
Merci mais malheureusement cela ne convient pas.
La requete ne retourne que les résultats suivants: Code :
colis 8006 contient la commande 5005 qui comporte egalement les colis 8004 et 8005, le colis 8004 contient egalement les commandes 5003 et 5004 qui elles même comportent le colis 8003. Le colis 8003 contient egalement la commande 5001 qui...... |
||
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
Bonjour,
comment reconnait-on la commande mère ? edit : en fait je ne saurai pas faire, il manque une relation sur la commande mère .. et la vous n'auriez plus de problème pour retrouver vos petits |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
Bonjour,
tout le problème est la. il n'y a pas de commande mère à proprement parler. Ce n'est pas une hiérarchie comme vous pouvez le voir sur le schéma (il n'y a pas de chef en dessous duquel viennent des subordonnés) Il faudrait qu'a partir de n'importe quel colis d'entré, je puisse retrouver toutes les commandes associées |
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
une piste mais c'est moche .... il faudrai pouvoir limité l'effet itératif, et ca je ne sais pas trop comment le faire.
Code :
|
||
|
|
00
|
|
|
#7 | ||||
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 565 ![]() |
Pas sûr mais je pense que c'est bon :
Code :
Code :
|
||||
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
Merci beaucoup à vous tous.
vmolines, ta solution semble effectivement parfaite. En tous cas, merci milles fois. vous me sauvez... |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 565 ![]() |
La requête cherche les commandes associées à un colis. Et pour chaque commande retournée, on cherche les commandes associées aux colis de la commande (la récursivité est là en passant par les colis de chaque commande). Ensuite j'évite de repasser sur les mêmes chemins à savoir :
- éviter le colis qui m'a permis d'amorcer la recherche - éviter de retourner une commande déjà traitée |
|
|
00
|
|
|
#10 | |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
Donc au final vous n'aviez pas besoin de ça ? :
Citation:
|
|
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
c'est ce que j'avais cru comprendre en décortiquant le code. Merci beaucoup. Je vais garder bien précieusement cet exemple.
Je pense également que ce code va servir a plus d'une personne ! Merci encore. |
|
|
00
|
|
|
#12 | ||
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
Bonjour,
je reviens a l'assaut car malheureusement, je viens de tomber sur un cas qui pose a priori problème : Code :
52173047 et 52173035 Pour le moment je n'ai pas reussi a modifier le code pour corriger cela. Si vous avez une solution, je vous en serai très reconnaissant. |
||
|
|
00
|
|
|
#13 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
|
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
Oups désolé,
Je n'avais pas vu ta réponse. On a du se croiser :s As tu une idée de correctif? |
|
|
00
|
|
|
#15 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
bah actuellement je ne comprend pas ton besoin car tu répond X à Waldar et Y à Vmolines.
Donc reprend le topic fait des tests en conséquents et détermine précisément ton besoin. |
|
|
00
|
|
|
#16 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
Ok, désolé, ce n'est pas forcément très clair, je le conçois. Je vais donc faire une nouvelle tentative.
Je veux récupérer la liste complète des numéros de commandes liées de près ou de loin à un numéro de colis. Donc, en gros, que je ne retrouve pas le colis 8002 n'est pas grave en soit tant qu'il n'y a pas d'autre commande dessus. (Je sais pas si c'est beaucoup plus clair :s) |
|
|
00
|
|
|
#17 | ||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
ok, donc par rapport à ton graphe si on selectionne n'importe quelle commande en entrée (ou colis) on doit se retrouver avec la liste de commande suivante : 5001, 5002, 5003, 5004, 5005 ?
edit : Je ne sais pas si ms sql gère les cycles "sans fin". Mais en restant sur la 1ere requete recursive fournit ca fait le job. ré-adaptée car j'avais fait un peu n'imp avec la commande mère (elle ne sert à rien) Code :
Idéallement il faudrait pouvoir changer ceci avec une option qui permetrai de ne pas cycler sur une ligne déjà traitée. (à voir avec les sépcialistes ms sql) |
||
|
|
00
|
|
|
#18 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
Merci Punkoff,
comme tu le dis, l'idéal serait de trouver un moyen de ne pas boucler sur les Commandes déjà processées. Avec ton systeme de level, il est peut être possible de l'utiliser comme un flag non ? si commande déjà traitée, je passe le flag a 1 (par defaut a zero). Je sais pas si c'est possible mais c'est clairement au dessus de mes compétences. j'ai passé 3 heures à tester diverses choses sans succès... |
|
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 644 ![]() |
Le problème c'est que la table temporaire ne peut pas être utilisée en sous-requête. Du coup c'est assez limité.. sinon ca aurai été bouclé avec un NOT EXISTS ou un group by sur le couple + max(level)
|
|
|
00
|
|
|
#20 |
|
Membre du Club
![]() Inscription : mai 2007 Messages : 194 ![]() |
oui, c'est ce que j'avais essayé sans succès
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com