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 :

Probleme condition where


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 110
    Points : 59
    Points
    59
    Par défaut Probleme condition where
    Bonjour ,

    j'utilise une condition where qui prend la valeur comme paramètre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE
    personnel.`id_categorie`=$P{CategorieParam}
    la valeur de CatégorieParam est récupéré par mon application.
    Le problème est qu'il y a des cas où je dois afficher toute les catégories donc la clause where devient inutile.
    Est-ce qu'il y a une chaine de caractère en SQL que je peux passer à CategorieParam , pour ne pas appliquer le filtre sur les catégories (afficher toutes les catégories) ?

  2. #2
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Points : 200
    Points
    200
    Par défaut
    Pourquoi ne pas prendre le problème autrement?

    Tu n'actives ta clause where que si tu ne dois pas afficher toutes les catégories...

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql= "Select col1, col2,.. FROM matable ";
    if (condition <> afficher_toutes_les_catégories) then
      $sql= $sql + "WHERE personnel.`id_categorie`=$P{CategorieParam}";
     
    $sql=$sql+";";

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par L0007 Voir le message
    Pourquoi ne pas prendre le problème autrement?

    Tu n'actives ta clause where que si tu ne dois pas afficher toutes les catégories...

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $sql= "Select col1, col2,.. FROM matable ";
    if (condition <> afficher_toutes_les_catégories) then
      $sql= $sql + "WHERE personnel.`id_categorie`=$P{CategorieParam}";
     
    $sql=$sql+";";
    Dans mon cas je dois utiliser que du SQL ( pas associé à un autre langage).

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Vous pouvez faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE personnel.id_categorie = coalesce($P{CategorieParam}, personnel.id_categorie)
    En laissant le paramètre à null pour obtenir toutes les catégories.

  5. #5
    Membre du Club
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 110
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Vous pouvez faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE personnel.id_categorie = coalesce($P{CategorieParam}, personnel.id_categorie)
    En laissant le paramètre à null pour obtenir toutes les catégories.

    Merci ca marche

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Août 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 19
    Points : 115
    Points
    115
    Par défaut
    Je déconseille l'usage de COALESCE.
    Çanuit beaucoup au performance.

    Utilise plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE personnel.id_categorie = $P{CategorieParam} OR $P{CategorieParam} IS NULL
    C'est la même chose, à savoir que si $P{CategorieParam} est null alors toutes les catégories sont renvoyées, mais c'est beaucoup plus rapide

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 400
    Points
    28 400
    Par défaut
    Dans ce cas particulier, le COALESCE porte sur l'évaluation d'un paramètre donc d'une constante.
    Un SGBD pourvu d'un optimiseur efficace évaluera cette expression une seule fois, avant de commencer les sélections et la requête pourrait être beaucoup plus performante ainsi.
    Il faut avoir tous les éléments en main pour discuter des performances d'une requête face à une autre : présence d'index, type des valeurs traitées, taille de la table... et SGBD utilisé.

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

Discussions similaires

  1. probleme avec WHERE ... BETWEEN ... AND ...
    Par toyyo dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 30/11/2005, 14h25
  2. Probleme Condition IF et ELSE
    Par arround dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2005, 01h21
  3. Condition WHERE
    Par adilou1981 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/11/2004, 11h04
  4. Fonction MAX dans une condition WHERE
    Par borgfabr dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 16h06
  5. Réponses: 6
    Dernier message: 24/09/2004, 13h10

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