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

Requêtes MySQL Discussion :

CASE WHEN dans clause WHERE


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut CASE WHEN dans clause WHERE
    j'ai des users avec des niveaux
    le super user à un niveau 6
    il doit avoir accès a tout, je pensais pouvoir le faire avec un CASE WHEN dans une clause WHERE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT c.id_cc,
    				  c.client_cc,
    				  date_format(c.debut_cc,'%d-%m-%Y') as debut,
    				  date_format(c.fin_cc,'%d-%m-%Y') as fin
    			FROM contratcadre c
    			JOIN rel_cc_agence u ON u.cc_agence=c.id_cc
    			CASE 
    			         WHEN ".$_SESSION['user']['niveau']."<6 THEN WHERE u.agence_cc=".$_SESSION['user']['agence']."
    				     WHEN ".$_SESSION['user']['niveau']."=6 THEN  WHERE 1
    				  END CASE" ;
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    plutôt comme cela peut être? :

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Je suppose que c'est une requête dans du PHP ?
    Alors il vaut mieux paramétrer la requête en PHP :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $query = "SELECT c.id_cc,
      c.client_cc,
      date_format(c.debut_cc,'%d-%m-%Y') AS debut,
      date_format(c.fin_cc,'%d-%m-%Y') AS fin
    FROM contratcadre c
    JOIN rel_cc_agence u ON u.cc_agence = c.id_cc ";
     
    if($_SESSION['user']['niveau'] < 6)
    {
      $query =."WHERE u.agence_cc = ".$_SESSION['user']['agence'];
    }
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 101
    Par défaut
    ou comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT c.id_cc,
    				  c.client_cc,
    				  date_format(c.debut_cc,'%d-%m-%Y') AS debut,
    				  date_format(c.fin_cc,'%d-%m-%Y') AS fin
    			FROM contratcadre c
    			JOIN rel_cc_agence u ON u.cc_agence=c.id_cc
    			WHERE 
    					(CASE WHEN ".$_SESSION['user']['niveau']."<6 THEN u.agence_cc=".$_SESSION['user']['agence']." END)
    				  ELSE
    					(CASE WHEN ".$_SESSION['user']['niveau']."=6 THEN 1 END)

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    je sais faire le if en php, la question n'est pas comment arriver à un resultat...
    Je voudrais juste savoir comme on syntaxe un CASE dans une clause WHERE en mysql
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    $_SESSION['user']['niveau'] ne semble pas être une colonne de la table interrogée. J'ai donc de gros doutes sur le fonctionnement de la clause CASE dans la requête SQL.

    Il me semble plus simple de tester la valeur de la variable dans le programme pour ajouter ou non une clause WHERE dans la requête. La requête s'en trouve d'ailleurs grandement simplifiée.

    Edit (il a répondu entre temps :
    je sais faire le if en php, la question n'est pas comment arriver à un resultat...
    Je voudrais juste savoir comme on syntaxe un CASE dans une clause WHERE en mysql
    Alors comme l'a dit Cybher, :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    WHERE CASE 
      Test THEN ConditionDeRestriction
      AutreTest THEN AutreConditionDeRestriction
    ...
      ELSE EncoreUneAutreConditionDeRestriction
    END
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    pour ce qui est du niveau ... c'est une concaténation du string ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $stringCc="SELECT c.id_cc,
    				  c.client_cc,
    				  date_format(c.debut_cc,'%d-%m-%Y') as debut,
    				  date_format(c.fin_cc,'%d-%m-%Y') as fin
    			FROM contratcadre c
    			JOIN rel_cc_agence u ON u.cc_agence=c.id_cc
    			WHERE 
    			CASE 
    			     WHEN (".$_SESSION['user']['niveau']."<6) THEN (u.agence_cc=".$_SESSION['user']['agence'].")
    				 WHEN (".$_SESSION['user']['niveau']."=6) THEN  (WHERE 1)
    			 END CASE" ;
    mais toujours une erreur de syntaxe
    cependant le CASE à l'air de boiter un peu vu qu'il me donne une erreur de syntaxe décalée en fonction du niveau


    A noter que le IF ne donne pas de meilleur resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    WHERE 
    				IF (".$_SESSION['user']['niveau']."<6) THEN (u.agence_cc=".$_SESSION['user']['agence'].")
    				ESLEIF (".$_SESSION['user']['niveau']."=6) THEN  (WHERE 1)
    				END IF" ;
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    pour ce qui est du niveau ... c'est une concaténation du string ...
    Une concaténation du string, c'est un slip ?

    Que contient ta variable $_SESSION['user']['niveau'] ?
    Fais un echo de la requête avant l'envoi au serveur pour pister l'éventuelle erreur et donne nous le texte de cette erreur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    essaie quelquechose dans ce genre (cela fait un peu bidouille...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT c.id_cc,
    				  c.client_cc,
    				  date_format(c.debut_cc,'%d-%m-%Y') AS debut,
    				  date_format(c.fin_cc,'%d-%m-%Y') AS fin
    			FROM contratcadre c
    			JOIN rel_cc_agence u ON u.cc_agence=c.id_cc
    WHERE u.agence_cc = 
    (CASE WHEN ".$_SESSION['user']['niveau']."<6 THEN  ".$_SESSION['user']['agence']."
    WHEN ".$_SESSION['user']['niveau']."=6 THEN  u.agence_cc
    END CASE);

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

Discussions similaires

  1. CASE WHEN et clause WHERE
    Par Vincetouch dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/04/2013, 13h07
  2. Case when dans la clause on
    Par Monstros Velu dans le forum Développement
    Réponses: 6
    Dernier message: 11/12/2009, 14h19
  3. [t-sql] instruction CASE dans clause WHERE
    Par ignitionflip dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/01/2007, 18h07
  4. [PL/SQL Oracle] Syntaxe dans clause where
    Par Misdrhaal dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2006, 13h33
  5. INNER JOIN ... ON ... ou jointure dans clause where
    Par schmur1 dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 28/06/2005, 09h16

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