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 :

AS et WHERE : Erreur #1054


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut AS et WHERE : Erreur #1054
    Bonjour,

    J'ai la requête suivante qui me permet de lister mes utilisateurs avec un certain nombre de colonnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT u.id, u.pseudo, u.active, u.lastactivity, s.status, u.city, 
    (YEAR( CURDATE( ) ) - YEAR( u.ddn )) - ( RIGHT( CURDATE( ) , 5 ) < RIGHT( u.ddn, 5 ) ) AS age
    FROM users u
    JOIN cometchat_status s ON s.userid = u.id
    WHERE u.active =1
    LIMIT 0 , 30
    L'age est donc déterminé à partir de la date de naissance (ex : 1990-10-08) et cela fonctionne bien.

    Si je veux faire le tri dans les résultats en fonction de l'age j'ajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE u.active =1 AND age = 18
    LIMIT 0 , 30
    Cependant MySQL me retourne le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #1054 - Unknown column 'age' in 'where clause'
    Je voudrais donc savoir pourquoi ? Et quelle pourrait être la solution afin qu'il reconnaisse le champ age ?

    Je vous remercie d'avance

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Les alias des colonnes de la projection ne sont pas encore définis au moment de l'application de la clause WHERE.
    En détournant le laxisme de MySQL tu dois pouvoir t'en tirer en mettant le filtre dans une clause HAVING sans GROUP BY (Oui, je sais, c'est une hérésie).
    Autrement tu es tenu de recopier la formule dans la clause WHERE.
    A ce propos, puisque CURDATE() et u.dnn sont des dates autant utiliser DAYOFYEAR() plutôt que de passer par RIGHT( coldate,5).
    Enfin, STATUS est un mot clé de MySQL, il est donc maladroit de l'utiliser comme nom de colonne.

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2011
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Merci !
    Merci beaucoup Maljuna Kris !

    Après diverses corrections j'ai donc une requête opérationnelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT u.id, u.pseudo, u.active, u.lastactivity, s.chstatus, u.city, 
    YEAR(DATE_SUB(NOW(), INTERVAL TO_DAYS(u.ddn) DAY)) AS age,
    FROM users u
    JOIN cometchat_status s ON s.userid = u.id
    HAVING u.active = 1 AND age = 18
    LIMIT 0 , 30
    Pour ce qui est de l'âge j'ai récupéré cela sur internet, ça à l'air de faire son travail.

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Mais non portable en raison de cette utilisation non-standard de la clause HAVING.

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

Discussions similaires

  1. Erreur 1054: Unknow column
    Par Krishna dans le forum Débuter
    Réponses: 4
    Dernier message: 13/05/2014, 15h12
  2. Erreur #1054 champ .. inconnu on clause
    Par Fred92390 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2010, 14h33
  3. erreur : #1054 - Unknown column 'Martin' in 'where clause'
    Par éric1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2009, 15h29
  4. erreur 1054 - clause having
    Par aurelie83 dans le forum Requêtes
    Réponses: 9
    Dernier message: 21/02/2008, 09h47
  5. Problème sur une requete : erreur 1054
    Par fulgaro dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2007, 11h32

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