Trier des données mysql par mois (timestamp)

Résolu/Fermé
valérie_o.O Messages postés 33 Date d'inscription dimanche 25 juillet 2010 Statut Membre Dernière intervention 27 août 2010 - 6 août 2010 à 02:09
 NiceMan - 20 juin 2012 à 02:53
Bonjour,

J'ai cherché tout l'après-midi, j'ai trouvé des trucs, je suis peut-être passée tout près, mais là je ne sais plus quoi faire, alors je demande ;)

Je viens de faire un mini-système de news, pour mettre un fil de nouvelles sur mon site web. J'ai suivi pour ça un tutoriel sur le site du zéro, si ça intéresse quelqu'un :P

Ma base de données s'organise comme ceci:
id =>Int (auto-increment)
titre =>varchar
contenu =>text
timestamp =>bigint

Je voudrais pouvoir trier mes nouvelles par mois, de sorte que sur ma page il ne s'affiche que les nouvelles du mois courant, et pour que plus tard je puisse faire des pages "archives" où je classerais mes nouvelles par mois (une page pour janvier, une février, etc.)

Je voudrais que ça donne quelque chose du genre, donc:
SELECT * FROM news WHERE timestamp(mois) == MoisCourant


Si je pars en faisant, disons:
SELECT timestamp FROM news

ça me sors la trallée-de-chiffres-pas-convertis-que-je-ne-veux-pas-calculer-moi-même-quelle-date-ça-fait. Et je ne sais pas comment convertir ça pour pouvoir trier mes données par mois.

Ça c'est le plus gros problème. Ensuite vient le "MoisCourant", je sais pas s'il y a une fonction ou quelque chose de déjà fait pour ça..

Merci de bien vouloir m'aider, toutes les pistes sont les bienvenues :)

3 réponses

HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
Modifié par HostOfSeraphim le 6/08/2010 à 11:58
Bonjour,

Voici la table telle que je l'ai recréée chez moi :

MariaDB [test]> desc t6;    
+-----------+-------------+------+-----+---------+----------------+    
| Field     | Type        | Null | Key | Default | Extra          |    
+-----------+-------------+------+-----+---------+----------------+    
| id        | int(3)      | NO   | PRI | NULL    | auto_increment |    
| titre     | varchar(50) | YES  |     | NULL    |                |    
| contenu   | text        | YES  |     | NULL    |                |    
| timestamp | bigint(20)  | YES  |     | NULL    |                |    
+-----------+-------------+------+-----+---------+----------------+    
4 rows in set (0.00 sec)    


MariaDB [test]> select * from t6;    
+----+---------+-----------+------------+    
| id | titre   | contenu   | timestamp  |    
+----+---------+-----------+------------+    
|  1 | titre 1 | contenu 1 | 1281011079 |    
|  2 | titre 2 | contenu 2 | 1261010079 |    
|  3 | titre 3 | contenu 3 | 1241010079 |    
|  4 | titre 4 | contenu 4 | 1141010079 |    
+----+---------+-----------+------------+    
4 rows in set (0.00 sec)    


MariaDB [test]> select id, titre, contenu, from_unixtime(timestamp) from t6;    
+----+---------+-----------+--------------------------+    
| id | titre   | contenu   | from_unixtime(timestamp) |    
+----+---------+-----------+--------------------------+    
|  1 | titre 1 | contenu 1 | 2010-08-05 14:24:39      |    
|  2 | titre 2 | contenu 2 | 2009-12-17 01:34:39      |    
|  3 | titre 3 | contenu 3 | 2009-04-29 15:01:19      |    
|  4 | titre 4 | contenu 4 | 2006-02-27 04:14:39      |    
+----+---------+-----------+--------------------------+    
4 rows in set (0.00 sec)    



Et voici je pense quelques réponses à vos questions :


MariaDB [test]> select id, titre, contenu, from_unixtime(timestamp) as datecomplete, month(from_unixtime(timestamp)) as mois from t6;   
+----+---------+-----------+---------------------+------+   
| id | titre   | contenu   | datecomplete        | mois |   
+----+---------+-----------+---------------------+------+   
|  1 | titre 1 | contenu 1 | 2010-08-05 14:24:39 |    8 |   
|  2 | titre 2 | contenu 2 | 2009-12-17 01:34:39 |   12 |   
|  3 | titre 3 | contenu 3 | 2009-04-29 15:01:19 |    4 |   
|  4 | titre 4 | contenu 4 | 2006-02-27 04:14:39 |    2 |   
+----+---------+-----------+---------------------+------+   
4 rows in set (0.00 sec)   



MariaDB [test]> select id, titre, contenu, from_unixtime(timestamp) as datecomplete, month(from_unixtime(timestamp)) as mois from t6 where month(from_unixtime(timestamp))=12;   
+----+---------+-----------+---------------------+------+   
| id | titre   | contenu   | datecomplete        | mois |   
+----+---------+-----------+---------------------+------+   
|  2 | titre 2 | contenu 2 | 2009-12-17 01:34:39 |   12 |   
+----+---------+-----------+---------------------+------+   



Pour ce qui est du mois courant :


<code>MariaDB [test]> select now() as maintenant;    
+---------------------+    
| maintenant          |    
+---------------------+    
| 2010-08-06 11:43:45 |    
+---------------------+    
1 row in set (0.13 sec)    


MariaDB [test]> select month(now()) as moiscourant;    
+-------------+    
| moiscourant |    
+-------------+    
|           8 |    
+-------------+    
1 row in set (0.00 sec)    


MariaDB [test]> select id, titre, contenu, from_unixtime(timestamp) as datecomplete, month(from_unixtime(timestamp)) as mois from t6 where month(from_unixtime(timestamp))=month(now());   
+----+---------+-----------+---------------------+------+ 
| id | titre   | contenu   | datecomplete        | mois | 
+----+---------+-----------+---------------------+------+ 
|  1 | titre 1 | contenu 1 | 2010-08-05 14:24:39 |    8 | 
+----+---------+-----------+---------------------+------+ 
1 row in set (0.00 sec) 





Configuration : Fedora 13 virtualisé sur machine hôte CentOS 5.5 (via VirtualBox)
6
valérie_o.O Messages postés 33 Date d'inscription dimanche 25 juillet 2010 Statut Membre Dernière intervention 27 août 2010 1
6 août 2010 à 02:16
J'ai vu ceci aussi:
SELECT MONTH(FROM_UNIXTIME('timestamp','%Y-%m-%d'))FROM news


mais ça me sort toujours 12... ce qui ne marche pas pcq mes deux nouvelles sont au moins d'aout.
0
valérie_o.O Messages postés 33 Date d'inscription dimanche 25 juillet 2010 Statut Membre Dernière intervention 27 août 2010 1
6 août 2010 à 16:57
Wow! merci pour ces réponses détaillées! C'est vraiment super je ne te dirais jamais merci assez :) En plus c'est très simple à comprendre, il me manquait la base en fait..

Merci beaucoup encore, ça fonctionne à merveille!
0
HostOfSeraphim Messages postés 6750 Date d'inscription jeudi 2 février 2006 Statut Contributeur Dernière intervention 31 juillet 2016 1 608
7 août 2010 à 02:41
Y'a pas de quoi :-)
0
Merci, ça sert encore deux ans après !!
0
Merci, c'est très bien expliqué !
0