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 :

Ajouter des conditions IF/ ELSE dans mysql


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut Ajouter des conditions IF/ ELSE dans mysql
    Bonjour à tous,

    J'aimerais calculer et afficher une moyenne seulement si une certaine condition s'applique. Pour faire simple je donne cette exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql="SELECT t.auteur_id, t.cours_id,"; 
    $sql.="CASE WHEN t.auteur_id ='3' THEN 'avg(t.score)' ELSE '' END ";
    $sql.="FROM Auteur t";
    Donc ici, j'aimerais afficher la moyenne d'un score seulement si auteur_id =3.

    Mais j'ai toujours une erreur de syntaxe que j'ignore comment régler.

    Merci pour votre aide.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Par défaut
    Je vois pas trop pourquoi utiliser un 'case' alors que tu n'as qu'une seule condition.
    Je connais pas trop la syntaxe de ça ...
    Sinon, c'est expliqué là :http://dev.mysql.com/doc/refman/5.0/...functions.html

    A ta place, je tenterai un simple "IF(cond, then, else) "

    Mais quand on y pense, je vois pas trop le sens de ta requête :
    Supposons que l'on ait ça :
    Table auteur
    auteur_id | score
    ------------------
    1 | 4
    3 | 3
    2 | 16
    3 | 7
    ------------------

    Que devrait afficher ta requête ?
    Il te manque pas un truc genre group by par hasard...?

    De plus, ta question porte davantage sur du SQL que du PHP, donc je pense que tu t'aies trompé de forum...

  3. #3
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    dans un select, tu peux utiliser la version fonctionnelle de if que te propose climoo... mais là ton approche est mauvaise, tu n'auras pas la moyenne... il faut faire un group by...

    pas la peine de surnommer ta table... non plus s'il n'y a qu'une table en jeu...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT auteur_id, cours_id, avg(score)
    FROM Auteur
    group by auteur_id
    where auteur_id=3

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut
    Citation Envoyé par Climoo Voir le message
    Je vois pas trop pourquoi utiliser un 'case' alors que tu n'as qu'une seule condition.
    Je connais pas trop la syntaxe de ça ...
    Sinon, c'est expliqué là :http://dev.mysql.com/doc/refman/5.0/...functions.html

    A ta place, je tenterai un simple "IF(cond, then, else) "

    Mais quand on y pense, je vois pas trop le sens de ta requête :
    Supposons que l'on ait ça :
    Table auteur
    auteur_id | score
    ------------------
    1 | 4
    3 | 3
    2 | 16
    3 | 7
    ------------------

    Que devrait afficher ta requête ?

    De plus, ta question porte davantage sur du SQL que du PHP, donc je pense que tu t'aies trompé de forum...
    Ma requête devrait afficher 5 c'est à dire juste la moyenne de l'auteur avec id 3.

    Le forum s'intitule PHP & MySQL, donc je suis sans le forum j'imagine, non ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut Ajouter des conditions IF/ ELSE dans mysql
    ok, je vais donner un autre exemple qui peut être sera plus clair et va mieux expliquer mon besoin.

    J'ai la table suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    id    note1  note2  timestamp
    1     3        0        12 mars
    2     5        0        12 mars
    3     6        0        12 mars
    4     5        6        15 mars
    5     7        7        15 mars
    6     4        0        15 mars
    La colonne note2 a été ajouté dans la table le 15 mars. Quand j'ai ajouté la colonne note2, les 0 ont été ajoutés par défaut dans les dates avant le 15 mars, alors que c'est pas une vrai note qui doit être calculée dans la moyenne. Par contre le 0 de la note2 pour le id 6 est un vrai 0 car ca été ajouté à partir du 15 mars et doit être calculé dans la moyenne. Donc ce que je veux faire, c'est que la moyenne de la note2 se calcule à partir de 15 mars.

    Autrement-dit, je dois ajouter dans ma requête une syntaxe du genre: si le timestamp est plus grand ou égal au 15 mars on calcule la moyenne de la note2, sinon on prends pas cette note en considération

    J'espère que maintenant vous comprenez mieux mon besoin

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    la structure de ta table est mauvaise et c'est la raison pour laquelle tu galères.
    Tu comptes rajouter des colonnes noteX autant de fois que nécessaire ?
    Si oui, cela va devenir vite ingérable.
    tu devrais plutôt faire ainsi :
    id | id_exam | id_eleve | note

    La date devrait être rattachée à l'examen et pas à la note.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2006
    Messages : 192
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Bonjour,

    la structure de ta table est mauvaise et c'est la raison pour laquelle tu galères.
    Tu comptes rajouter des colonnes noteX autant de fois que nécessaire ?
    Si oui, cela va devenir vite ingérable.
    tu devrais plutôt faire ainsi :
    id | id_exam | id_eleve | note

    La date devrait être rattachée à l'examen et pas à la note.
    Bonjour Rawsrc,

    En effet, ton approche est bonne et je l'utilise déjà dans d'autres projets, mais j'ai pas le choix de travailler avec la structure qui est déjà en place et c'est pour ça que je dois trouver un moyen pour contourner ça.

    Non je ne comptes pas rajouter des colonnes noteX autant de fois que nécessaire, c'est seulement une fois et c'est une exception



    Merci

Discussions similaires

  1. Ajouter des conditions dans une expression
    Par ruru9 dans le forum QlikView
    Réponses: 2
    Dernier message: 16/12/2013, 12h40
  2. condition sur count(*) dans mysql
    Par arizona_dream dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/09/2005, 09h06
  3. Récupérer des valeurs de checkbox dans MySQL
    Par digger dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 05/09/2005, 14h58
  4. [Fichier] Ajout des lignes de doc dans arraylist
    Par 3adoula dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 29/04/2004, 22h41

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