|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre régulier
![]() Frédéric GaërelInscription : février 2005 Messages : 125 ![]() |
Bonjour à tous.
J'ai une base oracle qui gère des Projets, découpés en Phase puis Activités et Taches. (particularité, les Taches peuvent être à tous les niveaux sauf la racine). En gros : Projet ++++ Phase 1 ++++++++ Activité 1 ++++++++++++ Tache 1 ++++++++ Activité 2 ++++++++++++ Tache 2 ++++ Phase 2 ++++++++ Tache 3 ++++++++ Activité 3 ++++++++++++ Tache 4 malheureusement pour moi ceci est représenté ainsi dans la table Code :
Code :
Ma question (on y arrive) est la suivante. Quelle est la meilleure facon de représenter mes données sous la forme suivante : Code :
C'est chaud non ? je l'ai fait mais c'est horrible... des UNION + des SELECT MAX(ID) KEEP (dense_rank LAST ORDER BY NIVEAU), etc... |
||||||
|
|
00
|
|
|
#2 |
![]() ![]() |
Ce que tu cherches à faire est de la cosmétique et n'est pas le boulot du SGBD mais celui du logiciel qui présente les données à l'utilisateur.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
12
|
|
|
#3 | |
|
Membre régulier
![]() Frédéric GaërelInscription : février 2005 Messages : 125 ![]() |
Citation:
Afin de ne pas devoir refaire cette "conversion de forme" à chaque fois, j'essaie de déporter cela dans une vue qui s'appuierait sur mes tables ce qui sera plus "lisible" pour les développeurs |
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Salut,
Cinephile, tu trouves que savoir à quelle activité est rattaché une tâche, a quelle phase est rattachée une activité c'est cosmétique ? Pas moi. Par contre, la modélisation est douteuse... je vais essayer de sortir la requête, ça a l'air drôle [EDIT] Tiens, l'activité 3 ne devrait-elle pas être de niveau 3 et la tâche 4 de niveau 2 ?
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#5 | ||||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 654 ![]() |
Vu la modélisation .....
Moi j'ai fait ca : ca marche avec l'exemple mais faudrai un truc un peu plus complexe Code :
J'ai aussi changé l'id 7 de votre exemple vu que c'est une tache et qu'il a le niveau 2 au lieu de 3 (je suppose, m'enfin si ça n'est pas le cas il faudra juste faire un test sur "est_tache" au lieu de niveau pour régler le problème.) résultat : Code :
edit : requete si le jeu de donné de départ est bon Code :
|
||||||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Punkoff, recursive with, c'est pas avant 11g (R2 ?)
[EDIT] Je me suis vautré, je vais corriger ma requête
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#7 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 654 ![]() |
pfff !! c'est le forum SQL !!
![]() Mais tu as raison oui, j'oubli tout le temps ce détail avec les postes Oracle. |
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Voilà
Code :
[EDIT] Zut, j'avais pas vu qu'une tâche n'était pas forcément rattachée à une activité...
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
||
|
00
|
|
|
#9 |
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 654 ![]() |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Bah en fait, j'avais bidouillé en ajoutant un CASE
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#11 |
|
Membre régulier
![]() Frédéric GaërelInscription : février 2005 Messages : 125 ![]() |
Impressionnant, je ne m'attendais pas à une telle rapidité dans les réponses...
Je soupçonne cependant un pb. Je teste et je vous en reparle Euh.. Merci quand même |
|
|
00
|
|
|
#12 | ||
|
Membre régulier
![]() Frédéric GaërelInscription : février 2005 Messages : 125 ![]() |
Voici mon jeu de test sous une forme plus... visuelle :
![]() Voici la table correspondante pour les tests : Code :
Vous êtes partis du principe que les ID étaient croissants, ce n'est pas le cas (mon jeu de tests était trop simple en effet, désolé). L'ID est une PK créée par le système, dans ce nouveau jeu de données j'ai créé la Phase "Recette" après les autres taches. Les ID ne sont alors plus croissants. Voici les données de la table TACHE : ![]() Votre solution me donne alors : ![]() Les deux dernières lignes sont fausses, la Phase correspondant est la 572, pas la 614, la 572 est une Phase, elle ne peut pas avoir d'id_activite. |
||
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Ben pourquoi tu as pris l'ID ?
![]() (C'est bien ton SEQ qui correspond à "sequence" dans ma requête ?)
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#14 |
|
Membre régulier
![]() Frédéric GaërelInscription : février 2005 Messages : 125 ![]() |
|
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Nan, ce que je veux dire, c'est que ton ID n'est certes pas croissant, mais ta séquence l'est, non ?
Donc pour construire la phase et le reste, il faut se baser sur la séquence et non sur l'ID ! (On est bien d'accord que ta séquence est unique sur le projet ?)
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#16 | |
|
Membre régulier
![]() Frédéric GaërelInscription : février 2005 Messages : 125 ![]() |
Citation:
euh je suis un peu paumé alors... quel est l'ordre SQL ? |
|
|
|
00
|
|
|
#17 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Ben tu prends ma requête d'avant, et tu remplaces "sequence" par "seq" ?
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
|
|
#18 |
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
J'ai une question : que se passe-t-il si vous devez insérer une nouvelle feuille dans votre arbre ? Vous décalez toutes les valeur de "sequence" a posteriori ? Ça semble franchement horrible.
Il ne serait pas envisageable d'avoir une table qui ressemble à une table d'arbre en rajoutant une colonne id_pere ? Parce que à terme, je ne vois que des problèmes à ce genre de tables. |
|
|
00
|
|
|
#19 | |||
|
Membre régulier
![]() Frédéric GaërelInscription : février 2005 Messages : 125 ![]() |
Citation:
Mais il s'agit d'un progiciel, je n'ai pas la main sur le schéma... D'où mon choix d'ajouter des vues qui "tapent" sur ce schéma pour en simplifier l'utilisation. En réponse au dernier post de Pacmann : l'ordre est donc : Code :
Pas trop grave, je ferai une double jointure sur id_projet ET sequence. Mais il me faudrait un index... (sur une vue???, je rappelle que le but ultime est de mettre ca dans une vue) |
|||
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Pacman PacmanBusiness analyst Inscription : juin 2004 Messages : 1 417 ![]() |
Alors tu peux faire un truc complètement barbare si tu connais la valeur max d'ID (celle qu'elle ne dépassera jamais).
Genre si ça dépasse pas 999, tu fais seq * 1000 + ID à la place de seq : ça garde le même classement au niveau des order by, max et tout. Et à la fin, ton ID est le reste de la division par 1000 de ton machin bricolé
__________________
(c'est ma photo) Paku, Paku ! Pour les jeunes incultes : non, je ne suis pas un pokémon... Le pacblog : http://pacmann.over-blog.com/ |
|
00
|
Copyright © 2000-2012 - www.developpez.com