lorik Posté 22 Février 2009 Posté 22 Février 2009 bonjour, Je bute sur un truc epineux : J'ai une table de stats, avec la date du jour sous forme de nombre de jours depuis le 1er janvier 1970 (donc aujourd'hui, c'est 14297, par exemple). J'ai besoin dans un select, de regrouper mes données par semaine. normalement si la date était sous forme de "DateJour=2009-02-13", je ferais un truc du style SELECT Date_format( `DateJour` , '%U' ) as Jours, FROM tablewhere bla blagroup by Date_format( `DateJour` , '%U' ) Mais là, je vois pas du tout comment arriver à mes fins avec mon format . Est ce que quelqu'un aurait une idée ? par avance merci
Kioob Posté 22 Février 2009 Posté 22 Février 2009 Hello, de manière générale quand on veut faire du "requetage" sur les dates, il faut utiliser un champ DATE/DATETIME, sinon forcément ça complique les choses... Après si tu veux utiliser ton champ "timestamp", tu peux tenter un truc du genre floor( DateJour / 7*86400 ) as semaine... en espérant que le 01 janvier 1970 était un lundi (ou dimanche selon ta façon de compter les semaines).
lorik Posté 22 Février 2009 Auteur Posté 22 Février 2009 Bonjour Kioob, merci de ta réponse Il y aurait pas un truc pour reconstruire un jour à partir du teimestamp ? Parce que dans ce cas, avec un detejour * 86400, je peux retrouver le jour en timestamp. En php, pas de problème, mais pour loger ça dans une requete sql, c'est là que je couine sur le principe, ça donnerait un truc du genre : group by Date_format( `lafonctionquivabien` , '%U' ) Mais je sais pas du tout la syntaxe pour ce genre de truc, je suis même pas sur que ça soit possible sous mysql.
Kioob Posté 22 Février 2009 Posté 22 Février 2009 MySQL peut faire certains calculs, mais avec du group by derrière ça risque d'être terriblement lent. Si tu fais un "from_unixtime()" tu as ensuite accès à toutes les fonctions de date de MySQL (je te laisse consulter la Doc MySQL pour avoir la liste)... mais autant stocker directement au format date/datetime tu ne crois pas ?
lorik Posté 22 Février 2009 Auteur Posté 22 Février 2009 Oui, tu as raison, mais je trouvais ça pas propre de stocker 2 fois la date sous 2 formats differents dans une table, donc je cherchais à savoir s'il ya une autre solution. S'il n'y a rien tant pis, mais c'est dommage. Merci du coup de main
Kioob Posté 22 Février 2009 Posté 22 Février 2009 Bah je pensais remplacer le champ actuel en fait, qui est rarement utile au format timestamp
lorik Posté 22 Février 2009 Auteur Posté 22 Février 2009 Ouais, c'est une idée qui m' a effleurée, mais hélas, ça sert à tout un tat d'autres scripts, et ça serait trop lourd, donc je vais devoir tout doubler, tant pis
Kioob Posté 22 Février 2009 Posté 22 Février 2009 En même temps je t'ai indiqué deux solutions : les calculs directs à coup de divisions par 86400, et la conversion à la volée au format date MySQL via la fonction from_unixtime(). Aucune des deux ne te convenant, je ne vois pas quel type de solution tu espérais, surtout en partant d'un format pas vraiment adapté.
lorik Posté 22 Février 2009 Auteur Posté 22 Février 2009 Ce que j'esperais, en fait, c'est d'etre un peu plus intelligent tu as raison, j'avais pas compris ton truc de from_unixtime, je pensais que c'etait une fonction php, pas sql, donc je voysis pas comment l'utiliser. Mais comme tu m'a bien titillé, j'ai compris que j'avais du zpper un truc Bref, voila la solution : Date_format(from_unixtime(day*86400), '%D') Merci pour ton coup de main.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant