JeuWeb - Crée ton jeu par navigateur
[Résolu] Recherche DB Timestamp - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Résolu] Recherche DB Timestamp (/showthread.php?tid=4159)



[Résolu] Recherche DB Timestamp - Thedeejay - 04-07-2009

Bichou bichour!

pour mon espace membre j'ai eu l'éxélente idée d'enregistrer mes anniversaires en Timestamp, et je voulais savoir si c'etait possible de faire une recherche pour avoir les annifs du jour par exemple...

J'imagine que c'est impossible,et dans ce cas je vais les repasser sous la forme jj-mm-aaaa, par contre j'ai besoin de votre aide pour savoir le code que je dois construire pour effectuer ce changement (les pages ok, mais modifier tous les membres..)
Merci Big Grin


RE: Recherche DB Timestamp - MdE - 05-07-2009

L'anniversaire en timestamp ? J'espère que c'est arrondi au moins ^^
Si tu ne veux pas changer, l'embêtant sera pour les personnes qui sont nées avant 1970.

Sinon pour savoir qui a son anniversaire aujourd'hui, il faut faire le modulo je pense et vu 1 an = 31 556 926 secondes, euh il est trop tard pour moi alors je te laisse trouver la formule Big Grin


RE: Recherche DB Timestamp - Sephi-Chan - 05-07-2009

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


<?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. Smile

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 Smile) mais je pense que ça devrait rouler.


Sephi-Chan


RE: Recherche DB Timestamp - wild-D - 05-07-2009

si tu veux pouvoir traiter tes dates en interne avec mysql, je dirais comme sephi, vaut mieux utiliser les type de mysql.

sinon si t'as enregistré la date en timestamp, normalement tu l'as fait pour tous pour un horaire très précis non ? (à 0h00m00s ou n'importe quelle heure fixe, vu que l'anif généralement on demande un jour et pas l'heure ou même les secondes)

donc t'utilise la même fonction que celle que tu utilise pour l'inscription pour avoir ton timestamp courant d'anniversaire du jour, et ensuite une bête requête SQL du type "SELECT ??? FROM ??? WHERE annif = '$timestamp_annif' "

edit: ... en y repensant, je dis n'importe quoi; ça marche pas ><


RE: Recherche DB Timestamp - Thedeejay - 05-07-2009

ben non wild-d :p

merci sephi, en fait j'ai fais ca un soir à 2-3h (oui je suis plus productif apres minuit, c'est con :/), en tout cas ta réponse est tres complète, je fais ca tout de suite Wink


RE: Recherche DB Timestamp - Allwise - 06-07-2009

J'apporterais juste une petite correction, la boucle est inutile. MySQL a assez de fonctions de traitements sur les dates pour éviter de faire une boucle en PHP, cf la fonction DATE_FORMAT.
Une requête comme ça :
Code :
UPDATE users SET birthday_bis = DATE_FORMAT(birthday, '%Y-%m-%d');
devrait faire l'affaire Smile


RE: Recherche DB Timestamp - Thedeejay - 06-07-2009

erf :p
trop tard :p

mais merci quand même Wink


RE: Recherche DB Timestamp - Sephi-Chan - 06-07-2009

Je t'en prie. Smile

Mais c'est vrai que c'est un peu con, ce que je t'ai proposé… Surtout quand 2 paragraphes plus bas, j'utilise DATE_FORMAT()…
Mais à ma défense, ça fait un moment que j'ai pas écris de SQL… Ruby on Rails le fait pour moi, et bien. Smile


Sephi-Chan


RE: Recherche DB Timestamp - Thedeejay - 06-07-2009

bah, je n'ai pas eu grand chose à changer, mon code principal reste le meme sauf que je repasse tout en timestamp avant