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

Langage SQL Discussion :

Recherche avec notation de la qualité


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de jimay
    Profil pro
    Inscrit en
    Août 2006
    Messages
    146
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 146
    Points : 178
    Points
    178
    Par défaut Recherche avec notation de la qualité
    Bonjour,

    désolé pour ce titre un peu vague mais je ne voyais pas quoi mettre de mieux...

    Je poste plus pour avoir des idées et des conseils que parceque je suis réèlement bloqué, j'arrive difficilement à quelque chose mais qu'est ce que c'est moche

    Je vous expose donc mon histoire:

    Je possède trois tables:
    - Dans une première de "quantités à produire", les champs sont remplis par une extraction d'un fichier XML.
    - Une deuxième est composée de produits
    - Une troisième se compose (en gros) de commandes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Qte_A_Produire (ID, NomClient, NomVisuel, Atelier_ID, Marque_ID, Format_ID, Produit_ID)
    Produit (ID, Atelier_ID, Marque_ID, Format_ID)
    Commande (ID, NomClient, NomVisuel, Produit_ID)
    Une quantité à produire fait référence à un Produit et une commande fait référence à un produit aussi. (relations 0-n)


    Le fait est que la clef étrangère (produit_id) dans la table Qte_A_Produire est entrée par l'utilisateur (qui comme tous les utilisateurs fera forcement une erreur un jour où l'autre).


    Le problème est donc de créer une requête qui va réussir à comparer les données entrées par l'utilisateur avec celles comprises dans la base, le tout avec une "note" de comparaison qui indiquera à l'utilisateur qui fait la vérification que le match a plus ou moins réussi.

    En gros, si les nomClient et NomVisuel, Marque_ID, Atelier_ID, Format_ID sont identique, il n'y a pas d'erreur possible, le Produit_ID est correct,
    si Le NomVisuel est différent, il est fort probable pour que ce soit bon quand même,
    si seulement Marque, Atelier, Format sont identique, il y a une petite chance,
    et si rien n'est identique alors on est sûr qu'il y ait une erreur.


    Je patauge un peu pour le moment avec des jointures de partout et j'ai peur que ma requête n'ateigne vite la centaine de lignes.......

    Si vous avez des idées/suggestions sur comment réaliser cette requête, je vous en serais très reconnaissant.

    Merci d'avance.

  2. #2
    Membre habitué Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Points : 155
    Points
    155
    Par défaut
    je suis désolé pour toi ... franchement.

    tu as accès à tout le code ?

    sinon ben change de patron .

    bon plus sérieusement si tu as accès au code tu devrais pouvoir t'arranger pour guider la saisie ou la restreindre pour éviter de s'enfoncer encore plus dans l'horreur.

    ensuite ce sont toutes les tables que tu utilise pour la comparaison ?

    et aussi tu utilise quoi comme bdd ?

    j'adore les patrons qui demande un nettoyage de bdd je compatis
    Le langage de programmation le plus vieux, le plus optimiser et le plus efficace est l'ADN quelqu'un d'extrêmement intelligent l'a obligatoirement inventé.

  3. #3
    Membre habitué Avatar de jimay
    Profil pro
    Inscrit en
    Août 2006
    Messages
    146
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 146
    Points : 178
    Points
    178
    Par défaut
    Bonjour,

    ce n'est même pas un nettoyage de base, c'est une appli que je suis en train de coder...

    le problème est que cette nouvelle appli doit utiliser des données provenant d'une autre, d'où les fichiers XML pour transférer les données, et d'où le risque d'erreur puisque la saisie est manuelle.

    Etant donné que l'autre appli est déjà en place etc... il n'est pas possible de "guider" la saisie malheureusement.


    Sinon, désolé, j'ai oublié de préciser, je travaille sur Oracle 10.2

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Voici un premier résultat une modélisation hasardeuse, et vous n'êtes qu'au début des problèmes.

    Revoyez votre MCD !

  5. #5
    Membre habitué Avatar de hiul dragonfel
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 199
    Points : 155
    Points
    155
    Par défaut
    dites le xml est fait à la main ?

    y a pas moyen de le générer ? ou d'accéder à la base de l'ancienne appli ?

    parceque là tu es vraiment mal barré.

    j'ai fait une migration entre bases access et j'ai pleuré en voyant comment était faite l'ancienne (il y avait encore les vestiges de tables d'exemple de tutos etc) mais si vous faites un truc sous oracle vous devez pouvoir faire quelque chose de mieux.

    sinon si vous êtes obligé de faire la saisie à la main de l'xml essayez de voir pour un prog de macro qui vas vous simplifier la vie en faisant les tâche répétitives à votre place j'en ai pas en tête là mais il y en a pas mal sur le net.
    Le langage de programmation le plus vieux, le plus optimiser et le plus efficace est l'ADN quelqu'un d'extrêmement intelligent l'a obligatoirement inventé.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Difficile de savoir ce que ça va donner sans exemple concret, mais vous pouvez déjà essayer avec un simple CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    SELECT DISTINCT 
           qap.id, 
           qap.nomclient,
           qap.NomVisuel, 
           qap.Atelier_ID, 
           qap.Marque_ID, 
           qap.Format_ID, 
           qap.Produit_ID,
           CASE 
                WHEN qap.NomClient = c.NomClient
                 AND qap.NomVisuel = c.NomVisuel
                 AND qap.Marque_ID = p.Marque_ID
                 AND qap.Atelier_ID = p.Atelier_ID
                 AND qap.Format_ID = p.Format_ID
                     THEN 0
                WHEN qap.NomClient = c.NomClient
                 AND qap.NomVisuel <> c.NomVisuel
                 AND qap.Marque_ID = p.Marque_ID
                 AND qap.Atelier_ID = p.Atelier_ID
                 AND qap.Format_ID = p.Format_ID
                     THEN 1
                WHEN qap.NomClient <> c.NomClient
                 AND qap.NomVisuel <> c.NomVisuel
                 AND qap.Marque_ID = p.Marque_ID
                 AND qap.Atelier_ID = p.Atelier_ID
                 AND qap.Format_ID = p.Format_ID
                     THEN 2
                ELSE 3
           END AS cas
    FROM Qte_A_Produire qap
    LEFT JOIN produit p ON p.id = qap.produit_id
    LEFT JOIN commande c ON c.produit_id = p.id

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Puisque c'est en cours de développement, comme le dit Waldar, revoyez votre MCD !
    La description de vos tables montre qu'il y a des données redondantes, ce qui vous oblige à cette gymnastique inconfortable pour contrôler la saise des utilisateurs.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Pas vraiment, puisque si j'ai bien compris, son problème de contrôle d'information vient plutôt du fait qu'il récupère une extraction xml d'une autre appli déjà en place.
    Je dis pas que la modélisation n'est pas à revoir, mais simplement que ça ne règlera pas le problème des erreurs de saisie des utilisateurs de cette autre appli.

  9. #9
    Membre habitué Avatar de jimay
    Profil pro
    Inscrit en
    Août 2006
    Messages
    146
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 146
    Points : 178
    Points
    178
    Par défaut
    En effet cette table qui pose problème (Quantite à produire) est obtenue suite à l'extraction de données provenant d'une autre application.

    Les données sont dont extraites, vérifiées, et suite à un traitement, les données sont effacées. La redondance n'est donc que de courte durée.

    Je pense que la solution proposée par Snipah me conviendra, je ne connaissais pas cette utilisation des CASE dans ce cas là.

    Merci beaucoup.

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

Discussions similaires

  1. Recherche avec Locate option lopartialKey
    Par jeje.r dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/12/2022, 10h56
  2. Recherche avec sed insensible à la casse
    Par _Mac_ dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 12/10/2005, 15h42
  3. Recherche avec des accents!?
    Par mona dans le forum Access
    Réponses: 3
    Dernier message: 14/06/2005, 20h36
  4. recherche avec findnearest
    Par souad26 dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/11/2004, 20h58
  5. Enlever la surbrillance lors d'une recherche avec vi
    Par sekiryou dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 04/03/2004, 13h55

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