1. Bonjour tout le monde ! Veillez consulter la Politique de forum pour comprendre nos règles, Merci a vous !
    Rejeter la notice

AIDE Optimisation d'une requete

Discussion dans 'Windev' créé par aminej76, Juil 8, 2018.

  1. aminej76

    aminej76 Active Member
    MEMBRE WX

    Inscrit:
    Jan 23, 2018
    Messages:
    286
    J'aime reçus:
    105
    Bonjour,
    Mon client exige bien de faire une requête multi critères sur la raison sociale :
    Ex chercher les clients dont la raison sociale contient :
    1) STE
    2) BEN
    :relievedface: PHAR
    4) MES

    [windev]SELECT
    CLIENT.COD_CLI AS COD_CLI,
    CLIENT.RAIS_CLI AS RAIS_CLI
    FROM
    CLIENT
    WHERE
    CLIENT.RAIS_CLI LIKE %{ParamRAIS_CLI1}%
    AND CLIENT.RAIS_CLI LIKE %{ParamRAIS_CLI2}%
    AND CLIENT.RAIS_CLI LIKE %{ParamRAIS_CLI3}%
    .....

    AND CLIENT.RAIS_CLI LIKE %{ParamRAIS_CLI10}%


    [/windev]
    Existe il une optimisation pour cette requête ?
     
    Tags:
  2. popoy

    popoy Well-Known Member
    MEMBRE WX

    Inscrit:
    Fev 23, 2018
    Messages:
    3,012
    J'aime reçus:
    1,618
    déjà tu as mis AND
    donc tu souhaite que la raison sociale contienne tous les paramètres ?
     
    aminej76 apprécie ceci.
  3. elhacene

    elhacene Active Member
    MEMBRE WX

    Inscrit:
    Jan 14, 2018
    Messages:
    299
    J'aime reçus:
    150
    bin si la raison social est une clé double alors ta requete est déjas optimisé
     
    aminej76 apprécie ceci.
  4. Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Bonjour,

    Il me semble que pour ce genre de cas, l'index FULLTEXT est fait pour ca :

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!



    En gros, on peut créer un index composé d'une ou plusieurs rubriques (un peu comme les clés composées) sauf qu'on le(s) déclare(nt) comme index FULLTEXT.
    Ensuite, il suffit de passer les mots en paramètres et ça doit fonctionner.
     
  5. Fouedusa

    Fouedusa Active Member

    Inscrit:
    Avr 22, 2018
    Messages:
    141
    J'aime reçus:
    120
    Bonjour;
    Je n'ai pas l'habitude de travailler avec SQL, car je ne le maitrise pas encore.
    Alors l'optimisation du code qui suit est à votre charge.

    On peut arriver à une solution en utilisant une table et un bouton

    [​IMG]


    Code à mettre dans "Sortie d'une ligne de la table", pour le contrôle de saisie :

    Code (Text):
    SI SansEspace(TABLE_SansNom1.COL_Nom)="" ALORS
        TableSupprime(TABLE_SansNom1)
    FIN
    Remplacer EMPLOYE par ton fichier ainsi que * par les rubriques désirées dans le Code du bouton :
    Code (Text):
    sdReq est une Source de Données
    sMareq est une chaîne =[
    SELECT  * FROM
    EMPLOYE
    WHERE
    ]

    SI TABLE_SansNom1..Occurrence<1 ALORS
        Info("Table Vide")
    SINON
        // Ajouter la valeur de la première ligne
        sMareq = ChaîneConstruit(sMareq+RC+"Employe.Nomfr LIKE '%"+SansEspace(TABLE_SansNom1.COL_Nom[1])+"%'")
        // Ajouter les valeurs des autres lignes ou cas où ça existent
        POUR i = 2 _A_ TABLE_SansNom1..Occurrence
            sMareq = ChaîneConstruit(sMareq+" OR "+"Employe.Nomfr LIKE '%"+SansEspace(TABLE_SansNom1.COL_Nom)+"%'")
        FIN
        // Execution de la requête
        SI PAS HExécuteRequêteSQL(sdReq,hRequêteDéfaut, sMareq) ALORS
            Erreur(HErreurInfo())
        SINON
            // Traitement à faire
            Info("La requête contient " + HNbEnr(sdReq) + " enregistrements.")
        FIN
    FIN
    Bon Dev.
     
  6. Ezekiel056

    Ezekiel056 Active Member

    Inscrit:
    Jan 17, 2018
    Messages:
    200
    J'aime reçus:
    154
    Ce bout de code doit surement fonctionner, mais est dangereux à l'utilisation.
    Que se passera t'il si la raison sociale contient un "%" ou une apostrophe ?

    Il faudra gérer toutes ces exceptions en manuel.. quelle galère !
     
  7. Fouedusa

    Fouedusa Active Member

    Inscrit:
    Avr 22, 2018
    Messages:
    141
    J'aime reçus:
    120

    Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!

    Ce bout de code doit surement fonctionner, mais est dangereux à l'utilisation.
    Que se passera t'il si la raison sociale contient un "%" ou une apostrophe ?

    Il faudra gérer toutes ces exceptions en manuel.. quelle galère !
    Cliquez pour agrandir...
    Merci pour la remarque

    Testes saisies dans le champ Table :

    On testant en utilisant "%" dans différents endroits : %MOT - %MOT% - %M%OT% - MOT% ===> on aura une réponse
    On testant en utilisant l'apostrophe ===> Affiche une Erreur (l'erreur du Si)
    On testant en doublant l'apostrophe ===> on aura une réponse
    Si on a une raison sociale dans la base de données qui contient l'apostrophe il faut la doubler dans le champ de recherche.

    S'il y a d'autres testes a faire dis moi.

    Bon Dev.
     

Partager cette page

Chargement...