Aller au contenu

fonction de date dans une requete


Sujets conseillés

Posté

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 table
where bla bla
group 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

Posté

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

Posté

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.

Posté

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 ?

Posté

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

Posté

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

Posté

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é.

Posté

Ce que j'esperais, en fait, c'est d'etre un peu plus intelligent :D

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

Bref, voila la solution :

Date_format(from_unixtime(day*86400), '%D')

Merci pour ton coup de main.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...