Extraire les enregistrements du mois dernier

Petit nouveau ! | 7 Messages

28 août 2008, 12:48

Bonjour,

Et bien pour commencer, voilà ma table que j'utilise :

Code : Tout sélectionner

CREATE TABLE `articles` ( `id` int(11) NOT NULL auto_increment, `id_cat` tinyint(4) NOT NULL default '0', `titre` varchar(255) NOT NULL default '', `texte` text NOT NULL, `image` varchar(255) NOT NULL default '', `date_insere` datetime NOT NULL default '0000-00-00 00:00:00', `date_longue` varchar(100) NOT NULL default '', `etat` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`), KEY `name` (`titre`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=829 ;
j'extrairais mes enregistrements normalement avec la requête suivante :
$query_article = "SELECT * FROM articles WHERE id_cat = ".$_GET['catid']." AND etat = 1 ORDER BY date_insere DESC LIMIT ".$start.", ".$nb_article;
Là, tous va bien. Cependant, on m'a demandé de mettre un autre critère, celui là consiste à afficher les articles du mois précédent à part et ceci sans préciser le mois voulu ( c'est à dire que à chaque mois, la liste doit être du mois dernier automatiquement). Aussi, il faut mettre les autres articles en dessous après un trais qui les différencie.

Bon, pour la requête en manuelle j'y réussi avec :
$query_article	= "SELECT * FROM articles WHERE id_cat = ".$_GET['catid']." AND etat = 1 AND (date_insere BETWEEN '2008-07-01 00:00:01' AND '2008-07-30 23:59:59') ORDER BY date_insere DESC LIMIT ".$start.", ".$nb_article;
Mais, je voudrais savoir comment faire pour rendre ma requête automatique.

J'utilise MySQL version 4.1.9 en local et 5.0.51 sur le serveur distant.

Cordialement.

Eléphant du PHP | 217 Messages

28 août 2008, 13:11

Salut,
voila une requete pour faire cela :
<?php
$tsLastMonth = mktime(0,0,0,date('m') -1,1,date('Y'));
$yearMonth= date('Ym',$tsLastMonth);

$query = 'SELECT * 
FROM 
	articles 
WHERE 
	id_cat = '.intval($_GET['catid']).' 
AND 
	etat = 1
AND
	"'.$yearMonth.'" = EXTRACT(YEAR_MONTH FROM date_insere)';
?>

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 août 2008, 13:46

Ou bien, pour tout faire par SQL :
$sql = 'SELECT * 
FROM 
    articles 
WHERE 
    id_cat = '.intval($_GET['catid']).' 
AND 
    etat = 1
AND 
   EXTRACT(YEAR_MONTH FROM SUBDATE(Now(), INTERVAL 1 MONTH)) = EXTRACT(YEAR_MONTH FROM date_insere) ';
Fonctions utilisées:
Extract : extrait une partie de la date
SubDate : soustrait un nombre d'une date selon un interval temps
Now() : date courante du serveur
Documentation : http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Petit nouveau ! | 7 Messages

28 août 2008, 13:47

Ok, merci pour votre réponse.

Je vais essayer cela et je vous tiendrais au courant.

A+

Re :

J'ai pu essayer les 2 requêtes proposées par "mojorisin" ainsi que "sadeq", et ils m'ont renvoyé le même résultat. Cela marche pour les 2.

Merci à vous 2 :wink:
Pour moi, je vais utiliser la deuxième requête de "sadeq" 8-)

Je vais mettre "résolu"

PS : Si je veux afficher tous les articles sans inclure du mois précédent, j'aurais juste à mettre :
$query_article = "SELECT * FROM articles WHERE id_cat = ".intval($_GET['catid'])." AND etat = 1 AND EXTRACT(YEAR_MONTH FROM SUBDATE(Now(), INTERVAL 1 MONTH)) <> EXTRACT(YEAR_MONTH FROM date_insere) ORDER BY date_insere DESC LIMIT ".$start.", ".$nb_article;
Est-ce juste :?: