Page 1 sur 1

date de naissance / âge

Posté : 23 août 2005, 13:25
par Johan
Bonjour,
merci pour ce super site, vraiment beaucoup de donnée !

En fait, je voudrai de l'aide. J'ai créé une table "joueur". Dans celle ci, différents champs tel nom, prenom, date_naissance (sous la forme 0000-00-00)

Et donc je voudrai récuperer ces trois informations (ce qui fonctionne parfaitement), mais au lieu de récupérer par exemple la date de naissance sous la forme 0000-00-00, je voudrai qu'on affiche l'âge du joueur en question. Cela doit être un calcul, mais je ne sais pas comment m'y prendre. pouvez vous m'aider ?
merci d'avance
Johan

Posté : 23 août 2005, 14:07
par Johan
J'ai quasiment trouvé ... mais le seul problème, c'est que la page de résultat m'affiche le même age que le premier joueur

voici mon code

Code : Tout sélectionner

<?php include("../config.php"); require ("../consult/fonctions.php"); ouverture(); //ENTETE2 (); echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"../league.css\">"; // déclaration de quelques variables $host = "localhost"; $user = ""; $pass = ""; $bdd = "resultats"; $table = "phpl_joueurs"; // connection avec MySQL @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données"); // Le @ indique à php de ne pas afficher de message d'erreur @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données"); $sql = "SELECT * FROM " . $table;$res = mysql_query($sql); $nb = mysql_numrows($res); // on recupère le nombre d'enregistrements $i = 0;while ($i < $nb){ $sql = "SELECT DATE_FORMAT(date_naissance, '%d/%m/%Y') as datefr, nom, prenom FROM phpl_joueurs "; // on envoie la requête $res = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on fait une boucle qui va faire un tour pour chaque enregistrement $data = mysql_fetch_array($res); echo "<div align=\"center\">"; // calcul de l'age à partir de la date de naissance $nom = mysql_result($res, $i, "nom"); $prenom = mysql_result($res, $i, "prenom"); $date_de_naissance = $data['datefr']; $chiffre = explode('/',$date_de_naissance); $time_naissance = mktime(0,0,0,$chiffre[1],$chiffre[0],$chiffre[2]); $seconde_vecu = time() - $time_naissance; $seconde_par_an = (1461*24*60*60)/4; $age = floor(($seconde_vecu / $seconde_par_an)); echo $nom . ' ' . $prenom . ' ' . $age . '<br />'; $i++; } // ne pas oublier d'incrémenter $i ;) ... sinon boucle infinie ! ?>
Comment cela se fait-il ? merci d'avance
Johan

Posté : 23 août 2005, 14:22
par ouckileou
jette un coup d'oeil du coté des fonctions de manipulations de dates de MySQL

si tu es sous MySQL 4.1 tu pourrais par exemple utiliser DATEDIFF

=> http://dev.mysql.com/doc/mysql/fr/date- ... tions.html

Posté : 23 août 2005, 14:27
par sadeq
Depuis MySQL 4.1.1, tu peux utiliser la fonction datediff dans un select pour faire la soustraction de la date de naissance et de la date du jour pour obtenir l'age exprimé en nombre de jours.
Pour convertir le résultat en jours en années, tu divises par 365.
Exemple :

Code : Tout sélectionner

SELECT DATEDIFF('2005-12-31','2000-12-31');
donne comme résultat : 365 jours (càd : 365/365 = 1 an)

Le mieux pour que le select calcule l'age en années c'est d'écrire :

Code : Tout sélectionner

SELECT (DATEDIFF(CURDATE() , date_naissance ) /365) as age_en_années;
NB. CURDATE() est une fonction SQL qui retourne la date en cours au format yyyy/mm/dd

Pour plus d'infos : http://www.nexen.net/docs/mysql/annotee ... n=datediff

Posté : 23 août 2005, 14:32
par Johan
euh, merci pour votre aide. Mais le code suivant je le place où ?

Code : Tout sélectionner

SELECT (DATEDIFF(CURDATE() , date_naissance ) /365) as age_en_années;
J'ai essayé comme ça

Code : Tout sélectionner

$sql = "SELECT nom, prenom, DATEDIFF(CURDATE() , date_anniverssaire) /365 as age_en_années; FROM phpl_joueurs "; // on envoie la requête $res = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); // on fait une boucle qui va faire un tour pour chaque enregistrement $data = mysql_fetch_array($res); echo "<div align=\"center\">"; echo $nom . ' ' . $prenom . ' ' . $age . '<br />';
mais erreur

Code : Tout sélectionner

Erreur SQL ! SELECT nom, prenom, DATEDIFF(CURDATE() , date_anniverssaire) /365 as age_en_années; FROM phpl_joueurs Erreur de syntaxe près de '(CURDATE() , date_anniverssaire) /365 as age_en_années; FROM ph' à la ligne 1

Posté : 23 août 2005, 14:38
par ouckileou
quelle version de MySQL utilises-tu ?

Posté : 23 août 2005, 14:39
par Johan
4.0.15

c'est du à ça ?

Posté : 23 août 2005, 14:40
par ouckileou
si tu es sous MySQL 4.1 tu pourrais par exemple utiliser DATEDIFF
Depuis MySQL 4.1.1, tu peux utiliser la fonction datediff
je pense oui :lol:

Posté : 23 août 2005, 14:41
par Johan
Oui je viens de m'en rendre compte ; comment pourrais-je résoudre donc mon problème ?

Posté : 23 août 2005, 14:46
par ouckileou
Tu as d'autres moyens, essaye de le faire directement dans MySQL

Est-ce que tu as essayé de chercher sur le forum des sujets sur "calculer une différence de dates" ? le sujet à déjà été traité plusieurs fois ça devrait t'aider

Posté : 25 août 2005, 12:47
par sadeq
Ou alors tu mets à jour ton MYSQL en téléchargeant une nouvelle version.