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 :

structure conditionnelle dans la clause where


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 35
    Points : 30
    Points
    30
    Par défaut structure conditionnelle dans la clause where
    Bonjour,

    je cherche à faire un script de recherche dans une base de donnée, concernant des ouvrages.

    Cette recherche peut être multicritères.

    J'ai donc un formulaire qui demande par exemple un auteur et un titre.

    Ma question est comment faire si l'utilisateur ne veut rechercher qu'un auteur par exemple?

    en gros je dois avoir:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT idouvrage, auteur, titre, langue, support, niveau, competence, domaine 
    FROM ouvrage 
    WHERE
      auteur = \''.$_POST['auteur'].'\' 
      and titre = \''.$_POST['titre'].'\' 
    LIMIT '.$Ndeb.','.$Nmax;
    mais si le champs titre n'est pas rempli, je n'ai aucun résultat, ce qui est normal.

    J'aimerais donc avoir des condition dans la clause where pour que le "and titre" ne soit valide que si la valeur $_POST['titre'] != ""

    et inversement pour l'auteur

    comment faire?

    merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    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 102
    Points : 28 387
    Points
    28 387
    Par défaut
    Ta requête étant préparée dans ton programme PHP, pourquoi ne pas créer la clause WHERE dynamiquement, en ne filtrant sur l'auteur / titre que si la donnée est renseignée...
    Cela donnera une requête beaucoup plus efficace que d'y ajouter des tests sur la présence d'un auteur ou d'un titre.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 35
    Points : 30
    Points
    30
    Par défaut
    Comment ca?

    je devrai mettre du php au milieu de ma requète genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE
      auteur = \''.$_POST['auteur'].'\' 
    '.if($_POST['titre'] != "") {.'
      and titre = \''.$_POST['titre'].'\' 
    '.}';
    ?

    Si c'est ca ca ne marche pas...

    sinon je n'ai pas compris...

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 874
    Points : 53 048
    Points
    53 048
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT idouvrage, auteur, titre, langue, support, niveau, competence, domaine 
    FROM ouvrage 
    WHERE   auteur = COALESCE(:mavariableAuteur, auteur)
      AND titre = = COALESCE(:mavariableTitre, titre)
    Tout simplement

    A +

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 67
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par liberty74
    Comment ca?

    je devrai mettre du php au milieu de ma requète genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE
      auteur = \''.$_POST['auteur'].'\' 
    '.if($_POST['titre'] != "") {.'
      and titre = \''.$_POST['titre'].'\' 
    '.}';
    ?

    Si c'est ca ca ne marche pas...

    sinon je n'ai pas compris...

    Non, gère le dans ton PHP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $requete  = 'SELECT idouvrage, auteur, titre, langue, support, niveau, competence, domaine ';
    $requete .= 'FROM ouvrage ';
    $requete .= 'WHERE 1 ';
    if (isset($_POST['auteur']) && ($_POST['auteur'] != '')) $requete .= ' AND auteur = "' . $_POST['auteur'] . '"';
    if (isset($_POST['titre']) && ($_POST['titre'] != '')) $requete .= ' AND titre = "' . $_POST['titre'] . '"';

Discussions similaires

  1. Utiliser un alias de colonne dans une clause Where MS SQL
    Par sir dragorn dans le forum Langage SQL
    Réponses: 11
    Dernier message: 12/10/2011, 09h31
  2. fonction booleenne dans une clause where ?
    Par user_h dans le forum Oracle
    Réponses: 1
    Dernier message: 20/10/2005, 15h05
  3. Ordre des tests dans la clause WHERE
    Par Tans98 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/09/2004, 10h52
  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

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