IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[oracle 8i] Rechercher depuis quand une caractéristique est hérité du parent


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [oracle 8i] Rechercher depuis quand une caractéristique est hérité du parent
    J'ai une table sous oracle 8i qui se présente sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    id             |id_parent      | caractéristique
    1              |0              |carac_1
    2              |0              |carac_2
    3              |1              |carac_1
    4              |3              |carac_3
    En règle générale, chaque id ne peut être parent qu'une seule fois (parfois 2, quand la personne qui a ajouté un enregistrement a fait des bêtises ).
    Un enfant n'a qu'un seul parent.
    Un et un seul enfant peut hériter de la caractéristique du parent.
    La caractéristique peut se transmettre sur 5 générations maximum.
    La caractéristique ne peut pas exister sur 2 générations différentes.(si un enregistrement possède une caractéristique, seul ses parents ou ses enfants pourront posséder la même).

    Je cherche à garder uniquement le ou les derniers enregistrements, pas les parents. Je souhaite également savoir depuis combien de générations la caractéristique existe.Je n'ai pas besoin de garder les enregistrements ou l'ID_parent est 0

    Ma requête ressemble actuellement à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select id, id_parent, caractéristique, level
    from Ma_table
    start with id_parent != 0
    connect by prior id = id_parent
    le level me donne le (nombre de génération -1)

    Avec ce code, je peux savoir le nombre de générations totales, mais pas celle qui portent la caractéristique. Je peux faire cette vérification via mon langage de développement, mais l'application est déjà assez lente et la table possède quelques milliers d'enregistrements.
    Y a-t-il moyen d'affiner plus la echerche, ou de l'effectuer complètement par ddes requetes?

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ne pouvez-vous pas filtrer la caractéristique à l'aide d'une clause where ?

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    ça marche avec un Connect by?
    J'ai bien essayé, mais ça ne fonctionnait pas.
    Je testerais ça lundi

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    la caractéristique est difficilement filtrable car il s'agit de vérifier qu'elle est la même que celle du parent.
    Pour retrouver le nombre d'enregistrement possédant la caractéristique, je vais rajouter une requête qui compte le nombre d'id par caractéristique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Select caracteristique, count(id)
    from Ma_Table
    where caractéristique is not null
    group by caractéristique
    et traiter le tout par programmation. C'est un peu lourd mais je vois pas d'autre solutions.

    Un petit coup de main serait le bienvenu

  5. #5
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Qu'est-ce qui prime dans la résolution du problème ?
    - la rapidité d'exécution ?
    - le code le plus compact possible ?
    - ou le temps mis à développer la solution ?

    Si la rapidité d'exécution est ce qu'il y a de plus important, en fonction de la plate-forme la plus rapide (client ou server et langage utilisé), on peut charger toute la table dans un tableau ou une collection (c'est aussi possible en PL/SQL) et tout coder en travaillant en mémoire.

    S'il faut livrer une solution le plus rapidement possible, vous avez intérêt à choisir le langage que vous maîtrisez le mieux.

    S'il faut le code le plus compact possible, il y a peut-être une solution pure en SQL, mais elle sera peut-être la plus longue à développer et à exécuter ...

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Je cherche plutôt un compromis entre la rapidité d'exécution et le temps mis a développer.
    Mais je connais pas vraiment grand chose en PL/SQL.
    Le résultat des deux requêtes est stocké sur des tables et le traitement est fait par programmation.

    Merci de votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/05/2006, 16h00
  2. [javascript]Savoir quand une frame est chargée
    Par LE NEINDRE dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/08/2005, 10h18
  3. Comment savoir quand une JFrame est rafraichie?
    Par mardona dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 19/08/2005, 13h20
  4. Réponses: 9
    Dernier message: 08/12/2004, 15h36
  5. Savoir quand une hotkey est relachée
    Par kriterium dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/07/2004, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo