05-07-2009, 12:46 AM
(Modification du message : 05-07-2009, 12:48 AM par Sephi-Chan.)
Hello,
Donc, tu as enregistré des timestamp Unix dans ton champ anniversaire au lieu d'utiliser le type DATE ? Si c'est le cas, ça n'a aucun intérêt et je ne peux que te conseiller de corriger cela en utilisant le type de données adapté (DATE, en l'occurrence).
Dans ce cas, tu peux ajouter une colonne de type DATE à ta table. Tu peux la nommer birthday_bis par exemple (car tu peux dans un premier temps garder l'ancienne, le temps d'adapter tes scripts). Ensuite, c'est simple : tu boucles sur chaque utilisateur et tu lances un UPDATE. Ça va être lourd et long, mais au moins, tu n'auras plus à le refaire. Cet UPDATE n'aura qu'à écrire la chaîne qui ressort de la fonction date, à laquelle tu demandes un format AAAA-MM-JJ (cf. MySQL - Les types DATETIME, DATE, et TIMESTAMP) comme premier argument, puis le timestamp UNIX actuellement stocké comme second argument.
Un exemple simpliste et à l'ancienne (car je ne sais pas quelle API tu utilises) :
Comme je le disais, ça risque d'être un peu lourd, mais disons que c'est le prix de l'erreur.
Ensuite, pour tes scripts, tu n'auras qu'à utiliser MySQL - Fonctions de dates et d'heures.
Pour la sélection puis l'affichage de tous tes utilisateurs (mais tu sauras le transposer pour les autres sélections :p) :
Pour la recherche des gens dont c'est l'anniversaire en récupérant ceux dont le jour de l'année (compris entre 001 et 366) de la date de naissance correspond au jour de l'année de la date du jour.
Je n'ai pas testé les requêtes (Ruby on Rails fait tout ça très bien pour moi ) mais je pense que ça devrait rouler.
Sephi-Chan
Donc, tu as enregistré des timestamp Unix dans ton champ anniversaire au lieu d'utiliser le type DATE ? Si c'est le cas, ça n'a aucun intérêt et je ne peux que te conseiller de corriger cela en utilisant le type de données adapté (DATE, en l'occurrence).
Dans ce cas, tu peux ajouter une colonne de type DATE à ta table. Tu peux la nommer birthday_bis par exemple (car tu peux dans un premier temps garder l'ancienne, le temps d'adapter tes scripts). Ensuite, c'est simple : tu boucles sur chaque utilisateur et tu lances un UPDATE. Ça va être lourd et long, mais au moins, tu n'auras plus à le refaire. Cet UPDATE n'aura qu'à écrire la chaîne qui ressort de la fonction date, à laquelle tu demandes un format AAAA-MM-JJ (cf. MySQL - Les types DATETIME, DATE, et TIMESTAMP) comme premier argument, puis le timestamp UNIX actuellement stocké comme second argument.
Un exemple simpliste et à l'ancienne (car je ne sais pas quelle API tu utilises) :
<?php
$resource = mysql_quuery("SELECT id, birthday FROM users;");
while($row = mysql_fetch_assoc($resource)){
$date = date("Y-m-d", $ton_champ_timestamp);
mysql_query("UPDATE users SET birthday_bis = '$date' WHERE id = $id");
}
?>
Comme je le disais, ça risque d'être un peu lourd, mais disons que c'est le prix de l'erreur.
Ensuite, pour tes scripts, tu n'auras qu'à utiliser MySQL - Fonctions de dates et d'heures.
Pour la sélection puis l'affichage de tous tes utilisateurs (mais tu sauras le transposer pour les autres sélections :p) :
SELECT *, DATE_FORMAT(birthday_bis, '%d-%m-%Y') AS birthday FROM users;
Pour la recherche des gens dont c'est l'anniversaire en récupérant ceux dont le jour de l'année (compris entre 001 et 366) de la date de naissance correspond au jour de l'année de la date du jour.
SELECT * FROM users WHERE DATE_FORMAT(birthday_bis, '%j') = DATE_FORMAT(CURDATE(), '%j')
Je n'ai pas testé les requêtes (Ruby on Rails fait tout ça très bien pour moi ) mais je pense que ça devrait rouler.
Sephi-Chan