Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2011, 02h12   #1
Invité de passage
 
Homme Loïc S.
Administrateur systèmes et réseaux
Inscription : juillet 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Loïc S.
Localisation : France, Moselle (Lorraine)

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

Informations forums :
Inscription : juillet 2011
Messages : 3
Points : 1
Points : 1
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 :
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 :
1
2
3
 
WHERE u.active =1 AND age = 18
LIMIT 0 , 30
Cependant MySQL me retourne le code suivant :

Code :
#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
BuXx57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 06h21   #2
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 531
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 531
Points : 3 524
Points : 3 524
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.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/11/2011, 10h16   #3
Invité de passage
 
Homme Loïc S.
Administrateur systèmes et réseaux
Inscription : juillet 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Loïc S.
Localisation : France, Moselle (Lorraine)

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

Informations forums :
Inscription : juillet 2011
Messages : 3
Points : 1
Points : 1
Par défaut Merci !

Merci beaucoup Maljuna Kris !

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

Code :
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.
BuXx57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 11h54   #4
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 531
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

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

Informations forums :
Inscription : novembre 2005
Messages : 2 531
Points : 3 524
Points : 3 524
Mais non portable en raison de cette utilisation non-standard de la clause HAVING.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h37.


 
 
 
 
Partenaires

Hébergement Web