Page 1 sur 1

Date jusqu'au 01 du mois précédent

Posté : 25 févr. 2009, 10:42
par Arkonara
Bonjour a tous :o , alors voila mon problème est le suivant : :x

Dans nommée incidents de ma bdd j'ai un champ date (aaaa/mm/jj).
Dans mon application j'ai un formulaire qui doit me montrer tous les incidents de cette table dont la date est comprise entre le 01/du mois m-1 jusqu'a la date actuelle.

Pour le moment ma requete sql me ramene toutes ma table car je ne vois pas comment faire dans mon where pour gerer sa.

Quelqu'un peut-il m'aider ?????? :oops:

PS: pas facile a expliquer :? donc hésiter pas a me poser des questions pour plus de renseignements.

Posté : 25 févr. 2009, 10:58
par @rthur
Bonjour,

Quelque chose du genre probablement:
mysql_query("SELECT * FROM nom_table WHERE champ_date BETWEEN '".mktime(0,0,0, date("m")-1, 1, date("Y"))."' AND NOW()");
Je t'invite à consulter la doc sur mktime pour bien comprendre ma suggestion:
http://fr2.php.net/mktime

Posté : 25 févr. 2009, 11:15
par Arkonara
Bonjour et merci @rthur d'avoir pris le temps de répondre.

Je viens de lire la doc que tu ma filer ( bon j'ai pas tout compris ^^ ), je l'ai adapter a mon appli et j'ai creer un champs adequate dans ma table, le probleme est que ce champs ne s'affiche pas.

Cela ne fonctionne pas

Et puis un cas n'est pas traiter dans cette solution, le cas ou si le mois actuel est janvier cad 01, alors faut afficher les incidents du mois de décembre cad 12 de l'année passer cad y-1.

Par consequent je pense qu'il me faut créer une fonction qui gere sa et je l'introduise dans ma requete. nn?

J'aimerais vos avis et votre aide svp

ps: je debute en php

Posté : 25 févr. 2009, 12:10
par naholyr
mktime gère ça, si tu lui donnes "0" comme mois, il prendra "12" de l'année précédente.

Il y a aussi deux autres possibilités.

Une basée sur strtotime() :
$date2 = time();  // NOW()
$date1 = strtotime('-1 MONTH', $date2); // Date2 - 1 MOIS
$query = sprintf('SELECT * FROM nom_table WHERE champ_date BETWEEN %s AND %s', $date1, $date2);
Une utilisant les fonctions de MySQL :
$query = 'SELECT * FROM nom_table WHERE champ_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW()';

Posté : 25 févr. 2009, 12:17
par @rthur
je l'ai adapter a mon appli et j'ai creer un champs adequate dans ma table,
Normalement tu n'as pas besoin de créer de champ supplémentaire, tu as juste besoin d'un champ au format date dans ta table...
Et puis un cas n'est pas traiter dans cette solution, le cas ou si le mois actuel est janvier cad 01, alors faut afficher les incidents du mois de décembre cad 12 de l'année passer cad y-1.
Si si il est bien traité, c'est d'ailleurs la force de la fonction mktime!
Regarde bien les exemples de la doc ;)
ps: je debute en php
Pourquoi posté dans le forum PHP avancé alors? :P

##edit: grillé par Naho ;)

Posté : 25 févr. 2009, 12:32
par Arkonara
Bonjour naholyr, j'ai adapter t'a premierr solution
$date2 = time();  // NOW() 
	echo $date2.'<br>';
	$date1 = strtotime('-1 MONTH', $date2); // Date2 - 1 MOIS 
	echo $date1.'<br>';
	$query = sprintf('SELECT * FROM incidents WHERE date_icdt BETWEEN %s AND %s', $date1, $date2); 
	echo $query;
en voici le resultat:
1235557514
1232879114
SELECT * FROM incidents WHERE date_icdt BETWEEN 1232879114 AND 1235557514Erreur requete

et la deuxieme solution n'a pas eu plus de succes

et la solution de @rthur maffiche une erreur de syntaxe
$resultat=mysql_query("SELECT * FROM incidents WHERE date_icdt BETWEEN '".mktime(0,0,0, date("m")-1, 1, date("Y"))."' AND NOW()";
J'ai bien un champ date dans ma table, mais son format est "Y/m/d"

ps: j'ai poster mon message sur php avancer car je ne pensait pas que des debutant tel que moi sache repondre a mon probleme

Posté : 25 févr. 2009, 12:38
par naholyr
Attention je m'en excuse mais mes propositions sont à côté de la plaque : elles te donneront les résultats entre aujourd'hui et le mois précédent mais à la même date, pas au 01.

C'est bien la solution d'@rthur qui est la bonne.
Par contre effectivement tu débutes en PHP, n'as-tu pas vu qu'il manquait une parenthèse fermante dans son code ? ;)

Posté : 25 févr. 2009, 12:41
par Arkonara
Si ^^ je venais de m'en appercevoir juste avant de lire ton message.

Donc j'ai corriger sa et desormais sa m'affiche
Resource id #3

Voyez-vous pourquoi?


Apriori, je dis bien a priori,
il existerai une autre solution qui est la suivante
$req = mysql_query("SELECT * DATE_ADD(date_icdt, - INTERVAL 1 MONTH) FROM incidents");
	if(mysql_num_rows($req) == 0)
	{
		echo 'Aucun incident!';
	}
	else
	{
		while($dat = mysql_fetch_assoc($req))
		{
			echo 'ID: '.$dat['champ_id'].' - Description: '.$dat['champ_description'].' - Date: '.$dat['date_icdt'].'<br />';
		}
	}
bon il me faut encore modifier le echo mais je ne comprend pas la syntaxe de ce echo