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

Bases de données Delphi Discussion :

Optimisation query Access


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut Optimisation query Access
    Bonjour,

    Auriez-vous une idée pour optimiser cette query ?
    Je n'aime pas trop la succession de AND/OR mais je ne sais pas si il y a moyen de faire autrement.

    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
    UPDATE Table1 SET Table1.ChiffreGagnants = Table1.ChiffreGagnants +1
    WHERE 
    Table1.num1 IN (1,2,3,4,5,6) 
    OR Table1.num2 IN (1,2,3,4,5,6) 
    OR Table1.num3 IN (1,2,3,4,5,6) 
    OR Table1.num5 IN (1,2,3,4,5,6) 
    OR Table1.num6 IN (1,2,3,4,5,6) 
    OR Table1.num7 IN (1,2,3,4,5,6)
    OR Table1.num8 IN (1,2,3,4,5,6)
    OR Table1.num9 IN (1,2,3,4,5,6)
    OR Table1.num10 IN (1,2,3,4,5,6)
    AND
     (
     Table1.num1 AND Table1.num2 AND Table1.num3 AND Table1.num4 AND Table1.num5 AND Table1.num6 AND Table1.num7 AND Table1.num8 AND Table1.num9 AND Table1.num10 NOT IN (SELECT Tirage.num1 FROM Tirage)
    AND
    Table1.num1 AND Table1.num2 AND Table1.num3 AND Table1.num4 AND Table1.num5 AND Table1.num6 AND Table1.num7 AND Table1.num8 AND Table1.num9 AND Table1.num10 NOT IN (SELECT Tirage.num2 FROM Tirage)
    AND
    Table1.num1 AND Table1.num2 AND Table1.num3 AND Table1.num4 AND Table1.num5 AND Table1.num6 AND Table1.num7 AND Table1.num8 AND Table1.num9 AND Table1.num10 NOT IN(SELECT Tirage.num3 FROM Tirage)
    AND
    Table1.num1 AND Table1.num2 AND Table1.num3 AND Table1.num4 AND Table1.num5 AND Table1.num6 AND Table1.num7 AND Table1.num8 AND Table1.num9 AND Table1.num10 NOT IN(SELECT Tirage.num4 FROM Tirage)
    AND
    Table1.num1 AND Table1.num2 AND Table1.num3 AND Table1.num4 AND Table1.num5 AND Table1.num6 AND Table1.num7 AND Table1.num8 AND Table1.num9 AND Table1.num10 NOT IN(SELECT Tirage.num5 FROM Tirage)
    AND
    Table1.num1 AND Table1.num2 AND Table1.num3 AND Table1.num4 AND Table1.num5 AND Table1.num6 AND Table1.num7 AND Table1.num8 AND Table1.num9 AND Table1.num10 NOT IN (SELECT Tirage.num6 FROM Tirage)
    );
    Il s'agit d'une requête qui update le champ "ChiffreGagnants" de la Table1 à condition que les valeur soit comprise entre 1 et 6 et à l'autre condition que ce tirage n'ai pas encore eu lieu dans la table "Tirage".

    Merci d'avance à tous

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    tu veut faire quoi exactement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Table1( ChiffreGagnants  integer
                ,num1 integer ) 
     
      Tirage( num1 integer
                ,num2 integer       
                ,num3 integer       
                ,num4 integer       
                ,num5 integer       
                ,num6 integer               
              )
    en fait si ta table tirage avait ete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      Tirage(   ...
                  Indice integer [1..6]
                 ,num integer
               )
    il aurait donc suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "select num from Tirage "

    @+ Phil

  3. #3
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    Bonjour Anapurna,

    mon but est d'incrémenter le champ 'chiffregagnant" de la table "Table1"
    la table1 contient les joueurs et les numéros choisis par ces joueurs.

    L'incrémantation ne peut avoir lieu que si les numéros de la "table1" contient les numéros du tirage actuel (exemple :1,2,3,4,5,6)

    ET

    si les tirages précédents (de la table tirage) ne contiennent pas les numéros du tirage actuel.

  4. #4
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    peut etre est-ce la structure de ta table qui n'est pas bonne.
    Pourquoi ne pas en faire une du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Table1 (
      id,
      ChiffreGagnants,
      etc...(sauf numX)
    )
     
    TableNums (
      id_Table1, //reference vers un id de table1
      Numero, //1..10
      Valeur
    ) //cle : (id_table1, Numero)
    deja, ca permetterai de remplacer ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WHERE 
    Table1.num1 IN (1,2,3,4,5,6) 
    OR Table1.num2 IN (1,2,3,4,5,6) 
    OR Table1.num3 IN (1,2,3,4,5,6) 
    OR Table1.num5 IN (1,2,3,4,5,6) 
    OR Table1.num6 IN (1,2,3,4,5,6) 
    OR Table1.num7 IN (1,2,3,4,5,6)
    OR Table1.num8 IN (1,2,3,4,5,6)
    OR Table1.num9 IN (1,2,3,4,5,6)
    OR Table1.num10 IN (1,2,3,4,5,6)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT UNIQUE t.id From table1 t, TableNums n WHERE (n.id_table=t.id)  AND (n.valeur IN (1,2,3,4,5,6));

  5. #5
    Membre éclairé Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Par défaut
    Merci de vos réponses mais je crois que je me suis mal fait comprendre ! ou alors c'est moi qui ne comprend pas

    table A : 10 integer + 1 integer X à incrémenter

    1,2,3,4,5,6,7,8,9,10 "X"

    table B : les 6 chiffres du tirage de la semaine précédente (c'est un lotto interne)

    1,2,3,4,5,6

    je veux incrémenter X (Table A) seulement si AUCUN des 10 integer de la Table A ne se retrouve parmis les 6 integer de la Table B.

    J'espère être clair !?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Par défaut
    Le SQL n'est pas un langage optimisé pour tout type de traitement.
    De temps en temps, il faut penser à utiliser Delphi aussi.

    Fais une requête sur tes 2 tables. Tu envoies le résultat à une fonction Delphi qui te renvoie True s'il faut incrémenter "X". Et dans ce cas, tu déclenches une Query Update pour incrémenter "X"

    Enfin, c'est ce que je ferais...

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

Discussions similaires

  1. Optimisation dans Access
    Par zilfana63 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/02/2008, 16h46
  2. optimisation query avec BETWEEN
    Par maxtin dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 13/01/2007, 01h22
  3. Oracle 9i - optimisation query
    Par goplay dans le forum Oracle
    Réponses: 1
    Dernier message: 21/06/2006, 17h10
  4. Réponses: 3
    Dernier message: 05/05/2006, 14h57
  5. Optimisation Bases Access: Tables liées
    Par caporal dans le forum Access
    Réponses: 4
    Dernier message: 05/04/2006, 12h38

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