2009-10-26 18 views
0

J'écris un code personnalisé pour créer un blog. J'ai besoin de la page des archives pour lister toutes les entrées du blog par mois. Je ne peux pas trouver un moyen de le faire. Je suppose que cela ne devrait pas être trop difficile car c'est une caractéristique commune à tous les blogs. La structure de la table est (postid, posttitle, PublishDate, .....)Liste des entrées de blog par mois

+0

Bien que ce soit assez simple, et qu'il y ait une méthode SQL 'standard' pour cela, il serait utile de savoir quel SGBDR vous utilisez. Serveur SQL? MySQL? Postgres? Oracle? Autre chose? –

Répondre

2

Je ne suis pas sûr que je comprends la question, mais si vous voulez que des chiffres de tous les messages par mois, utilisez une requête comme ceci:

SELECT DATE_FORMAT(publishdate, '%Y%m') AS publishmonth, count(*) AS entrycount 
FROM entries GROUP BY DATE_FORMAT(publishdate, '%Y%m') 

Si vous souhaitez que tous les messages pour un mois donné:

SELECT * FROM entries WHERE publishdate > '2009-01' AND publishdate < '2009-02'; 

et si vous voulez la liste tous messages regroupés par mois sur une seule page, il suffit de les sélectionner triées par publishdate et faire le regroupement au niveau local.

0

Si vos entrées proviennent d'une base de données SQL, il est plus facile de demander à effectuer le tri pour vous en utilisant un ORDER BY. Quelque chose comme

select * from posts order by publishdate 
0

Quelque chose comme ce pseudo-code:

SELECT `publishdate` FROM `entries` ORDER BY DESC `publishdate` GROUP BY YEAR(`publishdate`), MONTH(`publishdate`); 
foreach ($dates as $date) { 
    $date = mysql_real_escape_string($date) 
    SELECT * FROM `entries` WHERE `publishdate` = $date 
} 

Je pense.

+0

Il ya une faute de frappe: MOUTH/MOIS – Vamos

+0

Tout d'abord, cela ne fonctionnera pas, car publishdate n'est pas le même pour tous les messages dans un mois. Deuxièmement, les requêtes SQL ne devraient jamais se produire dans une telle boucle. –

+0

@Leonid: Pourquoi pas? –

Questions connexes