Version complète: sur le forum Webmaster Hub : [Newbie] Affichage par date
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
furious Gontran
salut,

Je rentre des données dans ma base avec une date.
Celle ci contient un champs date.
Cette date a la forme annee-mois-jour dans la base.

Je voudrais afficher juste les entrées de ma base pour les deux derniers mois.
Est ce que je suis obligé de recuperer la date de toutes mes entrées de les exploder pour isoler le mois et le comparer au mois en cours ??

Ou existe t'il une maniere plus simple de faire ?
Dan
Salut,

C'est tout simple !

SQL
Select * from `latable` where date > '2005-02-00'

te donnera les entrées pour février et mars 2005.

Essaie d'optimiser la requête pour éviter le "Select *" en mettant plutôt "Select champ1, champ2, champ3..."
furious Gontran
C'est beau quand c'est si simple...

Le truc c'est que tous les champs de ma table (pour ce cas la) sont utilisés.
Mais j'y penserais pour les prochaines requetes.
furious Gontran
Encore une question...

pour determiner la date d'affichage je fais

$moisactuel=date("m");
$mois2=$moisactuel-1;

et je me sers de ce mois pour la requete, en ajoutant un if particulier pour le mois de janvier.

Cependant mois 2 perd son 0 pour tous les mois<10.
Ce qui me donnerais une requete du type:

Select * from `latable` where date > '2005-2-00'

L'absence de 0 peut elle poser probleme.
(Je prefere demander, je n'ais pas beaucoup de moyen de le tester a part une patience de quelques mois)
Thanh
Tu peux faire
CODE
$mois2  = str_pad($moisactuel-1, 2, "0", STR_PAD_LEFT);


+
furious Gontran
ok...
En fait j'ais fais
$mois=date("m");
$année=date("Y");
$mois2=$mois-1;
if ($mois<11)
{
$dateFinale=$année."-0".$mois2."-00";
}
J'ais aussi ajouté un if pour le mois de janvier afin de decrementer l'année d'un...
lupucide
Remonte petit thread.

J'enregistre des dates dans un champ MySQL de type datetime incrémenté par date('Y-m-d H:i:s') et je voudrais afficher seulement les résultats pour ce mois. J'ai beau tâter et expérimenter je n'affiche qu'un message d'erreur me réclamant de prendre des cours afin d'écrire des requêtes correctes laugh.gif

Si quelqu'un pouvais me guider un peu, ce serait fort généreux.
Boo2M0rs0
Bonjour,

Je ne suis pas sur d'avoir compris :s c'est peut être ça:
SQL
SELECT * FROM `ta_table` WHERE MONTH(NOW()) = MONTH(`champ`)
lupucide
Ça à l'air de fonctionner comme ça mais je ne peux pas tester plus à fond car je n'est même pas un mois de cumuler dans ma base.

Merci, Boo2M0rs0. Mais pourrais tu m'expliquer d'où tu sort month car après recherche je n'ai rien trouver en rapport avec PHP/MySQL, une doc ou autre ?
Boo2M0rs0
Month() est une fonction mysql qui extrait le numéro du mois d'une date.
Donc dans ce cas , on regarde si le numéro de mois actuel ( month(now()) ) est égal au numéro de mois du champ ( month(`champ`) )

http://www.nexen.net/docs/mysql/annotee/da...e-functions.php

Par contre je me pose une question sur l'optimisation, est ce que mysql recalcule month(now()) pour chaque entrée à tester ? Si c'est le cas, il vaudrai mieux passer par la fonction date() de php:

CODE
$mois = date('m');
mysql_query("SELECT * FROM `ta_table` WHERE '$mois' = MONTH(`champ`)")
lupucide
Rooh, je n'avais pas penser à potasser la doc de MySQL whistling.gif

Vu tes doutes je vais passer le WHERE avec la fonction date(). Merci de ton aide.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.