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 :

Clause where = something or Nothing


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut Clause where = something or Nothing
    Bonjour,

    J'ai une petite question sur une requete SQL paramétrée. Est-il possible de faire quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MaTable where user = @user or user = "peux importe"
    En fait, je veux, si mon champ "user" est précisé faire une close avec ce user et sinon, recuperer toutes les valeurs de ma table.

    Est-ce possible en SQL directement ?

    Merci d'avance de vos réponses.

    DeWaRs

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je ne suis pas sûr de comprendre... Tu veux faire ceci:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM MaTable WHERE (user = @user and @user <> '') or (@user = '')

    Tatayo.

  3. #3
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    bonjour et merci de ta réponse.
    C'est à peu près cela, mais ma colonne user est forcément remplie, donc cela ne semble pas correct. Il faudrait une clause like quelque part je pense.
    En gros, pour mieux expliquer, j'ai un panel de recherche qui me sert a préciser ou non les clauses where de ma requête SQL. Si l'utilisateur remplit le champs "user" alors on l'utilise dans la requête, si il n'y a rien, avec la même requête, on affiche toute la table.

    J'espère que ces précisions pourront aider à m'éclairer !

    Cordialement

    dewars

    Ps: désolé pour les fautes d'accent, l'iPad n'est pas pratique pour cela.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    @user n'est pas le paramètre en question ?
    Dans ce cas, ma requête doit fonctionner:
    Si le paramètre est renseigné, c'est la première clause qui l'emporte (user = @user AND @user <> '')
    Si le paramètre n'est pas renseigné, c'est la deuxième qui l'emporte (@user = '')

    L'autre solution est de construire la requête à la demande, en fonction des paramètres renseignés. C'est plus efficace, et bien plus souple. Mais il faut plus de code

    Tatayo.

  5. #5
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Super, effectivement, après avoir testé, cela fonctionne. J'ai même pu rajouter une clause LIKE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((UserID LIKE @UserId AND @UserId <> '') OR (@UserId = ''))
    Je ne savais pas qu'on pouvait faire des conditions sur des variables externes directement dans la requête SQL.
    Dernière question, qu'entends-tu par "C'est plus efficace, et bien plus souple" ?
    Plus performant de faire des conditions dans le code plutôt que dans la requête ?

    Merci encore de ton aide.

    DeWaRs

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Citation Envoyé par DeWaRs Voir le message
    Derniere question, qu'entend tu pars "C'est plus efficace, et bien plus souple" ?
    Plus performant de faire des conditions dans le code plutot que dans la requête ?
    Là tu n'as qu'un seul critère, donc effectivement "ça passe".
    Mais imagine la requête si tu as plusieurs dizaines de critères, et que certains nécessitent une jointure. Si tu prends cette méthode, tu risques de faire des jointures "pour rien", vu que le critère en question n'est pas utilisé.
    Autant laisser les tests du côté du client, et passer une requête "simplifiée" au serveur.

    Tatayo.

  7. #7
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Je suis d'accord avec tatayo.

    Vous risquez de gros soucis de performances en faisant comme cela.
    A bove ante, ab asino retro, a stulto undique caveto

  8. #8
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Oki, merci de l'info, je suis passé par le code du coup car je filtrais sur énormément de critère.

    Cordialement.

    DeWaRs

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

Discussions similaires

  1. [super requete] Dumper un model avec une clause where
    Par elievar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/03/2005, 17h05
  2. Ordre des tests dans la clause WHERE
    Par Tans98 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/09/2004, 10h52
  3. Problème clause WHERE
    Par nesbla dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/06/2004, 15h07
  4. probleme avec le caractere 'Z' dans ma clause WHERE
    Par dibox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/04/2004, 12h21
  5. [ character en simple cote ] clause Where
    Par hocinema dans le forum DB2
    Réponses: 3
    Dernier message: 20/02/2004, 10h17

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