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 :
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

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.