[SQL] requete recursive automatique

requete recursive automatique [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 20-03-2009 à 16:08:22    

Bonjour,
 j'ai une table qui me gère des fiche de SAV (rien d'extraordinaire ;) ) Dans cette table il y a champs numfichesavold qui fait référence à un ancien bon de SAV de la même table.
Est -il possible de faire une et une seule requête SQL pour connaître tous les antécédent d'un dossier ?
 
Actuellement je suis obligé de passer par du code (PHP) pour faire cela, je recherche une solution plus propre et plus rapide :)
 
 
Précision si un dossier n'a pas d'antécédent numfichesavold == 0
 
 
Merci :jap:


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 20-03-2009 à 16:08:22   

Reply

Marsh Posté le 20-03-2009 à 17:19:07    

sous oracle tu peux avec un
 
connect by  
start with
 
google pr la syntaxe

Reply

Marsh Posté le 20-03-2009 à 17:36:33    

En MySQL, ce n'est pas faisable par contre.

Reply

Marsh Posté le 21-03-2009 à 00:42:41    

Si je comprends bien, cela ressemble à un affichage de treeview à profondeur infinie, n'est ce pas ?
 
une simple idée:
pourquoi ne pas avoir une fiche sav qui represente le pere de toutes les fiches sav ordonnées
 
ex:
- Pere_1
  - Fils_1
  - Fils_2
  - Fils_3
- Pere_2
  - Fils_1
  - Fils_2
 
Dans ce cas la gestion reste simple.
 

Reply

Marsh Posté le 24-03-2009 à 09:43:47    

je suis sous MySQL :(


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-03-2009 à 09:48:52    

akario a écrit :

Si je comprends bien, cela ressemble à un affichage de treeview à profondeur infinie, n'est ce pas ?


Pas infinie mais presque ;)
 

akario a écrit :


une simple idée:
pourquoi ne pas avoir une fiche sav qui represente le pere de toutes les fiches sav ordonnées
 
ex:
- Pere_1
  - Fils_1
  - Fils_2
  - Fils_3
- Pere_2
  - Fils_1
  - Fils_2
Dans ce cas la gestion reste simple.


 
Existant : Sur chaque fiche de SAV j'ai la possibilité d'avoir l'ancienne s'il en existe une.
Sinon cela voudrais dire que je crée une table( ou un champ dans la table fichesav)  contenant le numéro des autres fiches SAV s'il y en a ?


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-03-2009 à 10:02:04    

Je pense que son idée était plutôt de créer des fiches fictives contenant une liste de fiches liées entre elles, et de déclarer cette fiche comme "père" de toutes celles de la liste.
Ca te permet de garantir un seul niveau d'arborescence, tout en récupérant toutes les fiches liées...sans toucher à la structure des tables actuelles.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-03-2009 à 10:04:40    

Avec MySql, tu as la fonction GROUP_CONCAT :
http://dev.mysql.com/doc/refman/5. [...] tions.html
 
SELECT champ1, champ2, GROUP_CONCAT( numfichesavold ORDER BY numfichesavold_date DESC SEPARATOR "," )


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 24-03-2009 à 10:15:34    

fluminis a écrit :

Avec MySql, tu as la fonction GROUP_CONCAT :
http://dev.mysql.com/doc/refman/5. [...] tions.html
 
SELECT champ1, champ2, GROUP_CONCAT( numfichesavold ORDER BY numfichesavold_date DESC SEPARATOR "," )


soit je comprends pas group_concat, soit _ça n'a rien à voir avec la choucroute...[:doc petrus]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-03-2009 à 10:21:10    

Bin, il veut la liste des id des fiches de sav precedentes, avec ca il recupere dans un champ une liste de valeurs des id precedents separés par un ',' (et cadeau bonux, il peut meme les ordonnés par un autre champ.
Reste à faire un group by qui va bien
 
Edit: apres relecture, ca n'a effectivement rien a voir avec la choucroutte :)
Va falloir que je revois ma copie

Message cité 1 fois
Message édité par fluminis le 24-03-2009 à 10:23:06

---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 24-03-2009 à 10:21:10   

Reply

Marsh Posté le 24-03-2009 à 10:23:08    

skeye a écrit :

Je pense que son idée était plutôt de créer des fiches fictives contenant une liste de fiches liées entre elles, et de déclarer cette fiche comme "père" de toutes celles de la liste.
Ca te permet de garantir un seul niveau d'arborescence, tout en récupérant toutes les fiches liées...sans toucher à la structure des tables actuelles.


Ne pas toucher à la structure de la table certes, mais la gestion d'un fichier en plus d'une base de données je ne vois pas l'utilité :??: à programmer ça reste pareil à mes yeux !
Il faut lire le fichier, puis lire chaque fiche fils pour avoir l'historique, Chose que je fais actuellement car quand je lit la dernière fiche SAV,je lit le champs numFicheSAVold s'il est différent de 0, je vais chercher l'ancienne fiche et je refais la même logique jusqu'à trouver numFicheSAVold égale à 0.
Au pire je peut utiliser une table en plus pour faire ça mais un fichier ... :??:


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-03-2009 à 10:24:49    

fluminis a écrit :

Avec MySql, tu as la fonction GROUP_CONCAT :
http://dev.mysql.com/doc/refman/5. [...] tions.html
 
SELECT champ1, champ2, GROUP_CONCAT( numfichesavold ORDER BY numfichesavold_date DESC SEPARATOR "," )


J'y est cru ;)
Merci d'avoir pris le temps d'écrire :)


Message édité par stef_dobermann le 24-03-2009 à 10:26:17

---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-03-2009 à 10:29:00    

fluminis a écrit :

Bin, il veut la liste des id des fiches de sav precedentes, avec ca il recupere dans un champ une liste de valeurs des id precedents separés par un ',' (et cadeau bonux, il peut meme les ordonnés par un autre champ.
Reste à faire un group by qui va bien
 
Edit: apres relecture, ca n'a effectivement rien a voir avec la choucroutte :)
Va falloir que je revois ma copie


 
La liste des id de fiche sav précédente je l'ai sans l'avoir complètement :
Je l'ai en lisant le champs numfichesavold chaque fiche sav
mais je ne l'ai pas complètement car si je lit que la première fiche SAV, je ne sais pas combien il y en a derrière.


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-03-2009 à 10:29:37    

Ok donc copie revisitée :
Un article vraiment tres interessant sur la maniere de stocker des données hierrarchisées dans une bdd :
http://dev.mysql.com/tech-resource [...] -data.html
 
Par contre, c'est une stucture de table assez particuliere, donc a voir si tu as la possibilité de faire des modif des structures ou non, toujours est-il que l'article est tres interessant.


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 24-03-2009 à 10:31:03    

stef_dobermann a écrit :


Ne pas toucher à la structure de la table certes, mais la gestion d'un fichier en plus d'une base de données je ne vois pas l'utilité :??: à programmer ça reste pareil à mes yeux !
Il faut lire le fichier, puis lire chaque fiche fils pour avoir l'historique, Chose que je fais actuellement car quand je lit la dernière fiche SAV,je lit le champs numFicheSAVold s'il est différent de 0, je vais chercher l'ancienne fiche et je refais la même logique jusqu'à trouver numFicheSAVold égale à 0.
Au pire je peut utiliser une table en plus pour faire ça mais un fichier ... :??:


 
où ça un fichier?[:pingouino]
Une fiche, ie un enregistrement supplémentaire dans la table.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-03-2009 à 10:35:50    

désolé pour la mauvaise compréhension :)


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-03-2009 à 10:42:10    

mais cela n'est pas possible car dans cette table je ne gère que des fiches SAV réel, l'ID de la table me serre à créer le numéro de dépannage que je donne au client et qui me serre à tracer celui-ci.


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-03-2009 à 10:43:38    

stef_dobermann a écrit :

mais cela n'est pas possible car dans cette table je ne gère que des fiches SAV réel, l'ID de la table me serre à créer le numéro de dépannage que je donne au client et qui me serre à tracer celui-ci.


 
 
Je vois pas le problème... :??:
Le client aura toujours sa fiche, tu en as juste une fictive sans vrai client derrière, qui te sert à faire le lien avec les autres...non?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 24-03-2009 à 10:47:59    

fluminis a écrit :

Ok donc copie revisitée :
Un article vraiment tres interessant sur la maniere de stocker des données hierrarchisées dans une bdd :
http://dev.mysql.com/tech-resource [...] -data.html
 
Par contre, c'est une stucture de table assez particuliere, donc a voir si tu as la possibilité de faire des modif des structures ou non, toujours est-il que l'article est tres interessant.


je n'ai pas un très bon anglais,mais le principe est sympas,mais accès lourd à mettre en place et me ferais revoir mon application complètement  :sweat:
je travail déjà avec 17 tables pour avoir un paramétrage accès fin, et pouvoir ajouter autant de catégorie, fournisseur, marque, priorité, état du produit, ... à l'infinie.
pour au finale n'avoir qu'une base de données la plus propre possible en évitant au maximum les saisie utilisateur.


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 24-03-2009 à 11:06:26    

fluminis a écrit :

Ok donc copie revisitée :
Un article vraiment tres interessant sur la maniere de stocker des données hierrarchisées dans une bdd :
http://dev.mysql.com/tech-resource [...] -data.html
 
Par contre, c'est une stucture de table assez particuliere, donc a voir si tu as la possibilité de faire des modif des structures ou non, toujours est-il que l'article est tres interessant.


 
Merci de me l'avoir retrouvé cet article. Il revient régulièrement sur le tapis dès qu'on parle de gestion d'arbo avec MySQL ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 24-03-2009 à 11:55:32    

je crois que je vais rester avec mes X requêtes SQL pour l'instant !!


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 26-03-2009 à 12:20:56    

Donc hormis une restructuration de ma BDD, il n'y a aucune autre possibilité ??


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le 26-03-2009 à 14:00:12    

stef_dobermann a écrit :

Donc hormis une restructuration de ma BDD, il n'y a aucune autre possibilité ??


 
 
KISS ("Keep it Simple, Stupid" )

Reply

Marsh Posté le 26-03-2009 à 14:59:06    

J'avais trouvé cette représentation pour les arbres plutôt intéressante : http://sqlpro.developpez.com/cours/arborescence/


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 26-03-2009 à 15:52:23    

C'est la même méthode que donnée dans un post précédent et décrite ici : http://dev.mysql.com/tech-resource [...] -data.html
 
Sauf que ton lien est en fr...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-03-2009 à 15:54:42    

rufo a écrit :

C'est la même méthode que donnée dans un post précédent et décrite ici : http://dev.mysql.com/tech-resource [...] -data.html
 
Sauf que ton lien est en fr...


Désolé, je n'avais effectivement pas lu tout le sujet :sweat:


Message édité par kao98 le 26-03-2009 à 15:55:15

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 26-03-2009 à 16:38:34    

Pas grave, les réfractaires à l'anglais vont te remercier :D


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-04-2009 à 10:59:02    

akario a écrit :


 
 
KISS ("Keep it Simple, Stupid" )


Certes mais si je doit modifier ma BDD, je doit tout revoir mon application et je manque gravement de temps !
Donc "KISS" sur ce coup ;)
 
je suis en train de voir une possibilité en passant pas une table supplémentaire pour stocker les différentes fiches,  j'ai fais un jointure avec ma table des actionSAV, et j'arrive à obtenir en 1 requête l'ensemble les actions SAV réalisé sur chaque dossier.


---------------
Tout à commencé par un rêve...
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed