Requête mysql pour le calcul d'un âge
Résolu
nsylvain
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
tilto -
tilto -
Bonjour,
Je débute en tant que webmaster et j'ai, tant bien que mal, pu résoudre certains problèmes.
Notamment sur le calcul de l'age en tenant compte de la date de naissance compilée dans une base de donnée.
Grâce à un script en php, j'ai pu obtenir l'âge.
Ainsi se retrouve dans un tableau la date de naissance (grâce à une requête mysql) et l'âge (grâce au script php).
Le problème se trouve sur le tri de mes annonces (site de ventes d'animaux).
Comment faire dans ma requête pour que grâce à un lien l'internaute puisse visualiser UNIQUEMENT sur une page les animaux âgés de -de 3 mois (par exemple).
Dans ma requête aucun problème pour trier ou n'avoir que certaines dates de naissances mais pour l'âge c'est autre chose (script php et aucun lien avec la BDD si ce n'est un calcul entre la date de naissance et celle d'aujourd'hui) ... et c'est naturellement ce paramètre, l'âge, qui m'intéresse.
Merci encore à vous toutes et tous pour votre aide.
Je débute en tant que webmaster et j'ai, tant bien que mal, pu résoudre certains problèmes.
Notamment sur le calcul de l'age en tenant compte de la date de naissance compilée dans une base de donnée.
Grâce à un script en php, j'ai pu obtenir l'âge.
Ainsi se retrouve dans un tableau la date de naissance (grâce à une requête mysql) et l'âge (grâce au script php).
Le problème se trouve sur le tri de mes annonces (site de ventes d'animaux).
Comment faire dans ma requête pour que grâce à un lien l'internaute puisse visualiser UNIQUEMENT sur une page les animaux âgés de -de 3 mois (par exemple).
Dans ma requête aucun problème pour trier ou n'avoir que certaines dates de naissances mais pour l'âge c'est autre chose (script php et aucun lien avec la BDD si ce n'est un calcul entre la date de naissance et celle d'aujourd'hui) ... et c'est naturellement ce paramètre, l'âge, qui m'intéresse.
Merci encore à vous toutes et tous pour votre aide.
A voir également:
- Mysql age
- Mysql community server - Télécharger - Bases de données
- Casa de papel age ✓ - Forum Minecraft
- Fitness park age minimum ✓ - Forum Loisirs / Divertissements
- Age Casa de papel ✓ - Forum Cinéma / Télé
- Vampire diaries age ✓ - Forum Cinéma / Télé
7 réponses
http://www.devkb.org/sql/43-Calculer-l-ge-d-une-personne-dans-une-requete-MySQL
pour les adate avant 1er janvier 1970 ça coince, donc voir la solution pluq haut :)
Pascal
https://www.cucl.be/
pour les adate avant 1er janvier 1970 ça coince, donc voir la solution pluq haut :)
Pascal
https://www.cucl.be/
bonsoir, ce qui est faisable dans ton cas, est de faire en sorte dans ta requete de calculer l'âge
ici X est le nombre d'années, car DATEDIFF donne la différence entre deux dates, en jours. A toi de bien calculer après.
p.s : pour bien fonctionner il faut que ta date soit du type YYYY-MM-DD (AAAA-MM-JJ)
SELECT catégorie, race, nom, date_de_naissance FROM animaux WHERE DATEDIFF( date_de_naissance, CURDATE()) > (365 * X);
ici X est le nombre d'années, car DATEDIFF donne la différence entre deux dates, en jours. A toi de bien calculer après.
p.s : pour bien fonctionner il faut que ta date soit du type YYYY-MM-DD (AAAA-MM-JJ)
Bonsoir et merci pour la rapidité de la réponse,
J'ai bien essayé ce script mais malheureusement il y a souci...
Quand je met le script en entier (en mettant une date "bidon" comme essai) :
$query="select * from $table_annonces where DATEDIFF( 20051025, CURDATE()) > (365 * 1)";
$select=mysql_query($query);
while ($i=mysql_fetch_array($select))
{
$a++;
if (($a%2)==0)
{
$fond=$color;
} else {
$fond=$color_alt;
}
$id=$i[id];
$race=$i[race];
$sexe=$i[sexe];
$lof=$i[lof];
aucune annonce ne s'affiche et aucun message d'erreur.
Par contre quand je met le script sans > (365 * 1) toutes mes annonces s'affichent...
Apparemment la requête n'est pas reconnue, du moins la partie qui doit permettre le TRI...
Dans tous les cas merci encore pour cette réponse.
J'ai bien essayé ce script mais malheureusement il y a souci...
Quand je met le script en entier (en mettant une date "bidon" comme essai) :
$query="select * from $table_annonces where DATEDIFF( 20051025, CURDATE()) > (365 * 1)";
$select=mysql_query($query);
while ($i=mysql_fetch_array($select))
{
$a++;
if (($a%2)==0)
{
$fond=$color;
} else {
$fond=$color_alt;
}
$id=$i[id];
$race=$i[race];
$sexe=$i[sexe];
$lof=$i[lof];
aucune annonce ne s'affiche et aucun message d'erreur.
Par contre quand je met le script sans > (365 * 1) toutes mes annonces s'affichent...
Apparemment la requête n'est pas reconnue, du moins la partie qui doit permettre le TRI...
Dans tous les cas merci encore pour cette réponse.
as-tu essayé le format de la date comme je t'es dis ?
2005-10-25
et dans ton cas pour etre précis c'est :
il te faut des côtes si c'est toi qui rentre la variable comme ca.
2005-10-25
et dans ton cas pour etre précis c'est :
DATEDIFF( '2005-10-25', CURDATE())
il te faut des côtes si c'est toi qui rentre la variable comme ca.
Bonsoir et encore merci du temps consacré à mon problème,
J'ai bien essayé le format que tu me conseille :
$query="select * from $table_annonces where DATEDIFF('$annee-$mois-$jour', CURDATE()) = 365";
$select=mysql_query($query);
while ($i=mysql_fetch_array($select))
{
$a++;
if (($a%2)==0)
{
$fond=$color;
} else {
$fond=$color_alt;
}
$id=$i[id];
$race=$i[race];
$sexe=$i[sexe];
$lof=$i[lof];
$jour=$i[jour];
$mois=$i[mois];
$annee=$i[annee];
les champs $annee, $mois et $jour correspondent à la date de naissance de l'animal que rentre l'éleveur grâce à 3 menus déroulants (jour:1à31, mois:01à12 et année:1995 à2007).
Donc grâce à cette requête la diffréence de date devrait s'effectuer entre chaque date de naissance répertoriée dans ma BDD et la date d'aujourd'hui, le résulat étant donné en jours (pour une recherche d'un animal de - de 3 mois cela donne environ 90 jours...
Pourtant aucune annonce ne s'affiche sans aucun message d'erreur.
Apparemment c'est la partie = 90 (ou > 90, < 90) qui ne fonctionne pas !!
Merci encore et bonne semaine...
J'ai bien essayé le format que tu me conseille :
$query="select * from $table_annonces where DATEDIFF('$annee-$mois-$jour', CURDATE()) = 365";
$select=mysql_query($query);
while ($i=mysql_fetch_array($select))
{
$a++;
if (($a%2)==0)
{
$fond=$color;
} else {
$fond=$color_alt;
}
$id=$i[id];
$race=$i[race];
$sexe=$i[sexe];
$lof=$i[lof];
$jour=$i[jour];
$mois=$i[mois];
$annee=$i[annee];
les champs $annee, $mois et $jour correspondent à la date de naissance de l'animal que rentre l'éleveur grâce à 3 menus déroulants (jour:1à31, mois:01à12 et année:1995 à2007).
Donc grâce à cette requête la diffréence de date devrait s'effectuer entre chaque date de naissance répertoriée dans ma BDD et la date d'aujourd'hui, le résulat étant donné en jours (pour une recherche d'un animal de - de 3 mois cela donne environ 90 jours...
Pourtant aucune annonce ne s'affiche sans aucun message d'erreur.
Apparemment c'est la partie = 90 (ou > 90, < 90) qui ne fonctionne pas !!
Merci encore et bonne semaine...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
autant pour moi, je suis bête a taper contre les murs.
met des côtes autour de ton 90
> '90'
< '90'
>= '90'
<= '90'
= '90'
met des côtes autour de ton 90
> '90'
< '90'
>= '90'
<= '90'
= '90'
Bonsoir,
Au risque d'être pénible... il y a un mieux avec un date fixe de type xxxx-xx-xx :
$query="select annee, mois, jour from $table_annonces where DATEDIFF( '2007-06-01', CURRENT_DATE()) < '90' and race='$race' and (etat='MISE EN LIGNE' and sexe='FEMELLE')";
$select=mysql_query($query);
while ($i=mysql_fetch_array($select))
des annonces s'affichent dans mon tableau, par contre en mettant mes champs $annnee, $mois et $jour, plus rien...
$query="select annee, mois, jour from $table_annonces where DATEDIFF( '$annee-$mois-$jour', CURRENT_DATE()) < '90' and race='$race' and (etat='MISE EN LIGNE' and sexe='FEMELLE')";
$select=mysql_query($query);
while ($i=mysql_fetch_array($select))
Ce doit être une question de ' ou " mal placé ou à enlever, j'essaie toutes les possibilités...
Merci encore à toi.
Au risque d'être pénible... il y a un mieux avec un date fixe de type xxxx-xx-xx :
$query="select annee, mois, jour from $table_annonces where DATEDIFF( '2007-06-01', CURRENT_DATE()) < '90' and race='$race' and (etat='MISE EN LIGNE' and sexe='FEMELLE')";
$select=mysql_query($query);
while ($i=mysql_fetch_array($select))
des annonces s'affichent dans mon tableau, par contre en mettant mes champs $annnee, $mois et $jour, plus rien...
$query="select annee, mois, jour from $table_annonces where DATEDIFF( '$annee-$mois-$jour', CURRENT_DATE()) < '90' and race='$race' and (etat='MISE EN LIGNE' and sexe='FEMELLE')";
$select=mysql_query($query);
while ($i=mysql_fetch_array($select))
Ce doit être une question de ' ou " mal placé ou à enlever, j'essaie toutes les possibilités...
Merci encore à toi.
tu t'es assuré qu'il y avait bien des betes correspondant a ta sélection ??
augmente peut-être le 90
par contre dans le futur, tu peux laisser l'utilisateur faire ca limite de temps max. il te suffit de mettre un select liste, et de multiplier.
mais là déjà je peux te conseiller sinon de concaténer ta requête.
si ca ne marche pas, enlève les espaces dans la date diff, c'est à dire mettre ca
augmente peut-être le 90
par contre dans le futur, tu peux laisser l'utilisateur faire ca limite de temps max. il te suffit de mettre un select liste, et de multiplier.
mais là déjà je peux te conseiller sinon de concaténer ta requête.
$query="select annee, mois, jour from ".$table_annonces." where DATEDIFF( ' ".$annee."-".$mois."-".$jour." ', CURRENT_DATE()) < '90' and race=' ".$race." ' and (etat='MISE EN LIGNE' and sexe='FEMELLE')"; $select=mysql_query($query); while ($i=mysql_fetch_array($select))
si ca ne marche pas, enlève les espaces dans la date diff, c'est à dire mettre ca
DATEDIFF( '".$annee."-".$mois."-".$jour."', CURRENT_DATE())