8722 sujets

Développement web côté serveur, CMS

Bonjour, je voudrais afficher les informations de toute les personnes ayant plus de 18 ans (sans avoirs leurs âges) . en SQL sur phpMyadmin

Je bloque vraiment, Pour l'instant j'ai ça :

SELECT * FROM `etudiants` WHERE naissance = < 18

SELECT (YEAR()-YEAR())- (RIGHT(CURRENT_DATE,5)

***********************************************************************

Donc , pour moi, il faut d'abord écrire l'instruction

"faire afficher toutes les informations de la table "etudiants"

pour les personnes ayant plus de 18 ans .



Ensuite, j'écrit le calcule pour calculer l'âge par la date de naissance .

Je n'ais trouvé que cela sur internet et les différents forum

"SELECT (YEAR(10)-YEAR())- (RIGHT(CURRENT_DATE,5)"

Je ne comprend pas le calcule .

Votre pourrais me faire gagner plusieurs heures de recherches !

En vous remerciant .
Modifié par freeeeezi (10 Nov 2020 - 14:23)
Modérateur
Bonjour,
freeeeezi a écrit :
Donc , pour moi, il faut d'abord écrire l'instruction

"faire afficher toutes les informations de la table "etudiants"

pour les personnes ayant plus de 18 ans .


Jusque là, ça va.

freeeeezi a écrit :
Ensuite, j'écrit le calcule pour calculer l'âge par la date de naissance .

Je n'ais trouvé que cela sur internet et les différents forum

"SELECT (YEAR(10)-YEAR())- (RIGHT(CURRENT_DATE,5)"


Là, par contre, on revient à du pifométrique total.

Alors, d'abord, on a un SELECT sur la table des étudiants.
SELECT * FROM etudiants

Ensuite, on rajoute un WHERE pour ne garder que ceux qui ont 18 ans et plus. Pour cela, on suppose que dans ta table, tu as bien un champ "naissance" contenant une DATE mysql. L'idée est de prendre la date d'aujourd'hui qui est CURRENT_DATE en mysql, et d'en extraire l'année avec la fonction YEAR() et d'en soustraire l'année de naissance de l'étudiant, toujours via la fonction YEAR() pour obtenir son âge. Ça donne :
YEAR(CURRENT_DATE) - YEAR(naissance)

Ensuite, il faut comparer le jour et le mois actuels avec le jour et le mois de naissance de l'étudiant. Ça se fait via la fonction RIGHT() en ne prenant que les 5 derniers caractères des dates (qui sont au format yyyy-mm-dd, donc les 5 caractères, c'est mm-dd, c'est à dire le mois suivi d'un tiret suivi du jour). On obtient :
RIGHT(CURRENT_DATE, 5) < RIGHT(naissance, 5)

Si cette comparaison retourne 0, alors l'anniversaire de l'étudiant est avant aujourd'hui, sinon elle est après (et donc il faut dans ce cas retirer 1 an dans son âge). Du coup, on obtient l'âge de l'étudiant par :
YEAR(CURRENT_DATE) - YEAR(naissance) -(RIGHT(CURRENT_DATE, 5) < RIGHT(naissance, 5))

Il ne reste plus qu'à comparer cet âge à 18 et de mettre le tout après WHERE. On obtient alors la requête complète :
SELECT * FROM etudiants WHERE (YEAR(CURRENT_DATE) - YEAR(naissance) - (RIGHT(CURRENT_DATE, 5) < RIGHT(naissance, 5))) >= 18

Amicalement,
Meilleure solution
parsimonhi a écrit :
Bonjour,


Jusque là, ça va.



Là, par contre, on revient à du pifométrique total.

Alors, d'abord, on a un SELECT sur la table des étudiants.
SELECT * FROM etudiants

Ensuite, on rajoute un WHERE pour ne garder que ceux qui ont 18 ans et plus. Pour cela, on suppose que dans ta table, tu as bien un champ "naissance" contenant une DATE mysql. L'idée est de prendre la date d'aujourd'hui qui est CURRENT_DATE en mysql, et d'en extraire l'année avec la fonction YEAR() et d'en soustraire l'année de naissance de l'étudiant, toujours via la fonction YEAR() pour obtenir son âge. Ça donne :
YEAR(CURRENT_DATE) - YEAR(naissance)

Ensuite, il faut comparer le jour et le mois actuels avec le jour et le mois de naissance de l'étudiant. Ça se fait via la fonction RIGHT() en ne prenant que les 5 derniers caractères des dates (qui sont au format yyyy-mm-dd, donc les 5 caractères, c'est mm-dd, c'est à dire le mois suivi d'un tiret suivi du jour). On obtient :
RIGHT(CURRENT_DATE, 5) &lt; RIGHT(naissance, 5)

Si cette comparaison retourne 0, alors l'anniversaire de l'étudiant est avant aujourd'hui, sinon elle est après (et donc il faut dans ce cas retirer 1 an dans son âge). Du coup, on obtient l'âge de l'étudiant par :
YEAR(CURRENT_DATE) - YEAR(naissance) -(RIGHT(CURRENT_DATE, 5) &lt; RIGHT(naissance, 5))

Il ne reste plus qu'à comparer cet âge à 18 et de mettre le tout après WHERE. On obtient alors la requête complète :
SELECT * FROM etudiants WHERE (YEAR(CURRENT_DATE) - YEAR(naissance) - (RIGHT(CURRENT_DATE, 5) &lt; RIGHT(naissance, 5))) &gt;= 18

Amicalement,




Merci beaucoup, tu m'à très bien expliqué !