Page 1 sur 1
Afficher les mois d'une longue liste d'actu
Posté : 09 déc. 2007, 20:01
par lacfab
Bonjour,
J'ai une liste d'actualités énorme (+ de 4000) et pour la page d'archive je voudais faire un pré-tri par mois. Les dates sont de type AAAA-MM-DD dans la base de donnée et il faudrait donc que ça affiche
DECEMBRE 2007
NOVEMBRE 2007
OCTOBRE 2007
...
j'ai essayé divers choses après des recherches sur le net mais rien ne marche ou alors j'arrive pas à faire marcher) ... merci de votre aide.
Lacfab
Posté : 09 déc. 2007, 20:49
par dunbar
Salut,
un truc du genre peut-être
$sql = "SELECT * FROM table_news";
$result = mysql_query($sql) or die ('Ne trouve rien: '.mysql_error());
$total = mysql_num_rows($result);
// si on a récupéré un résultat on l'affiche.
if($total) {
// lecture et affichage des résultats .
while($row = mysql_fetch_array($result)){
$dateSQL = $row['date_news'];
//**Transformation de la date de depot en date française avec le mois en lettre**//
list($annee, $mois, $jour) = explode("-", $dateSQL);
$month = array ( 1 => 'Janvier',
2 => 'Février',
3 => 'Mars',
4 => 'Avril',
5 => 'Mai',
6 => 'Juin',
7 => 'Juillet',
8 => 'Août',
9 => 'Septembre',
10 => 'Octobre',
11 => 'Novembre',
12 => 'Décembre');
$date_fr = $jour." ".$month[$mois -0]." ".$annee;

Posté : 09 déc. 2007, 21:44
par lacfab
hé bien celà affiche les résultats suivants :
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Décembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
Novembre 2007
...
Ce qui est exactement ce que j'ai obtenu ... comment ne garder qu'un seul mois de chaque ?
Posté : 09 déc. 2007, 21:57
par lacfab
Voilà mon script :
$supdate = date('Y-m-d');
$req_actu2 = mysql_query("SELECT date, activ, genre FROM actus WHERE activ=1 AND (genre='1' OR genre='4') AND date<='$supdate' ORDER BY date DESC") or die ('ERREUR archives ACTUS default<br>'. mysql_error());
$dateStrTimeOld = 0;
while ( $resultat = mysql_fetch_array($req_actu2)){
$dateStrTime = strtotime($resultat['date']);
if ($dateStrTime != $dateStrTimeOld){
echo "<br><br><font size=4>".getMois(date("F",$dateStrTime))." ".date("Y",$dateStrTime)."</font>";
}
}
Posté : 09 déc. 2007, 23:54
par Truc
Dans le même genre que
ce sujet.
Faire le tri depuis la requête sql inutile de sortir toute la table pour rien.
J'en profite pour déplacer dans le forum "SQL"
Posté : 10 déc. 2007, 00:45
par lacfab
Merci Truc j'ai essayé cette méthode mais il m'affiche 12x "décembre 2007". En plus de mettre le mois je dois afficher l'année car j'ai des actus sur 4 ans. Y a une requete YEAR() aussi ?
Non plus sérieusement j'ai fais quelques recherches et rien de bien intéressant je dois pas chercher comme il faut :'(
$req_actu2 = mysql_query("SELECT MONTH(date) as mois , COUNT(*) as nb FROM actus GROUP by mois ORDER BY date DESC");
Posté : 10 déc. 2007, 01:03
par Truc
YEAR()
Exécute la requête sans php directement dans phpmyadmin (ou autre) pour vérifier le résultat.
Posté : 10 déc. 2007, 19:32
par lacfab
en utilisant cette requete :
SELECT MONTH(date) as mois, YEAR(date) as annee , COUNT(*) as nb FROM actus
il m'affiche "décembre 2007" un grand nombre de fois ce qui correspond à 12 mois sur 4 années ... j'arrive pas à afficher le décompte des mois

Posté : 10 déc. 2007, 22:42
par Truc
Donne nous un
extrait de ta table (schéma + échantillon de données)
Posté : 11 déc. 2007, 00:45
par lacfab
mais bien sur
Code : Tout sélectionner
# Version du serveur: 4.0.25
CREATE TABLE actus (
id int(11) NOT NULL auto_increment,
genre tinyint(1) NOT NULL default '1',
titre varchar(200) default NULL,
date date default NULL,
chapeau text NOT NULL,
contenu text,
source varchar(200) NOT NULL default '',
ordre tinyint(1) NOT NULL default '9',
activ tinyint(1) NOT NULL default '0',
activ_heure time default '00:00:00',
visites int(8) NOT NULL default '0',
KEY id (id),
KEY activ (activ),
KEY activ_heure (activ_heure),
KEY date (date),
KEY genre (genre),
KEY ordre (ordre),
KEY source (source),
KEY titre (titre)
) TYPE=MyISAM;
INSERT INTO actus VALUES (1, 1, 'titre 1', '2005-06-08', '', 'texxxxxxte blaaaaaa bla', 'Fabien', 9, 1, '10:00:00', 2);
INSERT INTO actus VALUES (262, 1, 'titre 2', '2005-06-02', '', 'texte bla bla texte', 'Jerome', 9, 1, '10:00:00', 3);
INSERT INTO actus VALUES (6, 1, 'titre 3', '2005-02-03', '', 'texte texte bla bla', 'Fabrice', 9, 1, '08:00:00', 12);
Posté : 11 déc. 2007, 01:15
par Truc
Bon en faite je ne vois pas ce qui pose problème... dans la dernière requête proposée il manque le "GROUP BY" sur le mois et sur l'année.
Posté : 11 déc. 2007, 14:40
par lacfab
oui pardon j'ai trop nettoyé mais le GROUP BY annee, mois est bien en place
Posté : 12 déc. 2007, 02:07
par Truc
Un
GROUP BY annee, mois va regrouper sur les années puis sur les mois donc
Code : Tout sélectionner
2005 janvier
2005 mars
2005 juin
2006 janvier
2007 mars
2007 septembre
donc au final 2 janvier et 2 mars...