Page 1 sur 1

Reculez de plusieurs mois, Date ou MySQL ?

Posté : 19 juin 2006, 12:16
par Sophos
Bonjour,

J'ai un soucis au niveau de traitement de date. Dans ma base SQL, (MySQL) j'ai plusieurs données avec, notamment, la date de leur entée.
Je souhaite récupérer les entrées d'il y a deux, trois, et 6 mois.
Je ne sais pas si je dois effectuer la requete SQL avec comme parametre,
//Il y a deux mois
$mois2 = Date("m")-2;
//requete MySQL
$req = "SELECT champs1, champs2, Date from table where MONTH(date)=$mois2 order by Date ASC";
Ou s'il existe une fonction en MySQL qui permet directement de gérer ceci. Car si je suis en janvier et que je souhaite aller deux mois en arrière le script ci dessus me retournera -1 (01-2=-1) ce qui vas bien sur poser problème.

Merci

Posté : 19 juin 2006, 12:40
par Ryle
Cela peut effectivement se faire en php ou en sql. Tu devrais trouver ton bonheur dans la FAQ :

Quelques petites manipulations avec les dates (PHP/MySQL)
:)

Posté : 20 juin 2006, 09:25
par Invité
4 - Obtenir une date dans le futur/le passé

avec PHP :
<?php
$date = Array('annee'=>date('Y'), 'mois'=>date('m'), 'jour'=>date('d'));
$N = 31;

// mktime fait automatiquement le calcul
$time = mktime(00, 00, 00, $date['mois'], $date['jour']+$N, $date['annee']);
$dansNjours = date('d/m/Y', $time);
echo $dansNjours;
?>
avec MySQL :
Code:

Code : Tout sélectionner

SELECT DATE_ADD(NOW(),INTERVAL 5 DAY); # le futur SELECT DATE_SUB(NOW(), INTERVAL 5 DAY); # le passé
Je dois donc faire un

Code : Tout sélectionner

SELECT DATE_SUB(NOW(), INTERVAL 31 DAY); # le passé
Or il faut que je crée un tableau avec le nombre de jours de chaque mois ? car si le mois en question n'as que 30 ou en fevrier quin'as que 28 jours ca va me retoruner deux mois en arrière et non un seul mois en arrière.

A moin qu'on peut considérer cela comme un detail a deux ou trois jours près...

Merci

Posté : 20 juin 2006, 09:43
par ouckileou
Si tu regardes dans la doc de DATE_SUB : http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

Tu verras que tu peux utiliser différents paramètres pour l'intervalle, pas forcément des jours

Donc cette requête te renverra la date d'il y a un mois :)

Code : Tout sélectionner

SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);

Posté : 20 juin 2006, 10:13
par Sophos
Reuh, ^^

Code : Tout sélectionner

`Date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH) AND `Date` < DATE_SUB(NOW(), INTERVAL 2 MONTH) order by Date ASC
Voila le code que j'ai utilisé, donc la normalement je dois avoir les entrée regroupé par mois, dans ce cas, les entrées enregistré il y a un mois non ?

Merci

Posté : 20 juin 2006, 10:15
par ouckileou
:lol: Toujours la même erreur qui revient :

`Date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH) => 20/05

AND `Date` < DATE_SUB(NOW(), INTERVAL 2 MONTH) => 20/04

Comment une date peut-elle être supérieure au 20 mai, et inférieure au 20 avril ? :)

Tu peux aussi simplifier un peu en utilisant BETWEEN

Posté : 20 juin 2006, 10:24
par Sophos
lol, merci beaucoup, vs êtes vrt sympas de répondre aussi vite.

Je vais au plus vite corriger cette erreur, merci beaucoup !! :wink: