Requete groupée par semaine du vendredi au jeudi

Petit nouveau ! | 5 Messages

14 mars 2007, 18:18

:? Bonjour.

Votre aide m'a été très utile la dernière fois alors je reviens vous voir!
Voilà, le problème que j'ai c'est que je dois faire une requête dans une base de données Mysql et grouper le tout par semaine. Chaque semaine doit commencer le vendredi et se terminer le jeudi. Je sais qu'il y un fonction GROUP BY WEEK() mais cela ne permet que le groupement par semaine du lundi au dimanche.

Quelqu'un a-t-il une idée de comment on peut réaliser cela?

Merci d'avance

Ghismart

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

15 mars 2007, 00:13

Le plus simple serait de rajouter un champs avec le numéro de semaine. Tu peux certainement faire un script qui mettra à jour tous les enregistrements actuels un par un, et modifier tes scripts pour rajouter ton numéro de semaine spécial pour les futurs enregistrements.

Tout autre solution sera basée sur le numéro du jour avec un modulo, plein de math propisces à l'erreur et lent, etc... À mon avis, va au plus simple et ajouter un champs TINYINT avec le numéro de semaine. Edit: err, peut-être SMALLINT en fait au cas où tu aies plus de 255 semaines de données.

Petit nouveau ! | 5 Messages

17 mars 2007, 21:49

Cependant, je me demandais s'il n'y avait pas une possibilité de grouper les requête par semaine mais à partir du jeudi (avec WEEK() ET WEEKDAY() par exemple.

Mais je pense que tu as raison, un script pour déterminer le numéro de semaine en PHP et mettre à jour la base de données est surement plus efficace.

Merci pour le tuyau

Ghismart

Administrateur PHPfrance
Administrateur PHPfrance | 3088 Messages

18 mars 2007, 01:07

je me demandais s'il n'y avait pas une possibilité de grouper les requête par semaine mais à partir du jeudi (avec WEEK() ET WEEKDAY() par exemple
Il y a sûrement plein d'autres façons de le faire. J'ai été obligé d'ouvrir le manuel pour vérifier ce que fait WEEK(), si tu veux faire commencer un autre jour tu peux simplement faire glisser toutes les dates de 2, 3, 4 jours. Quelque chose comme

Code : Tout sélectionner

SELECT ... FROM ... GROUP BY WEEK(DATE_SUB(mon_champs_date, INTERVAL 3 DAYS))
Comme ça tu décales toutes les semaines de 3 jours, le jeudi est compté comme le lundi.

Petit nouveau ! | 5 Messages

18 mars 2007, 19:31

Merci Hubert

J'ai essayé la solution proposée mais ça ne marche pas comme présentée. C'est probablement dû au fait que la fonction WEEK() groupe toujours les résultats sur un dimanche ou un lundi peu importe si on déphase la date. Ça ne fait que déphaser les résultat mais qui sont toujours affichés selon le même groupement journée (dimanche ou lundi).

Il faudrait Trouver une façon de déphaser de 4 jours la fonction WEEK().

Je continue à chercher

Merci encore