Trier des données mysql par mois (timestamp)
Résolu
valérie_o.O
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
NiceMan -
NiceMan -
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:
Si je pars en faisant, disons:
ç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 :)
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 :)
A voir également:
- Trier des données mysql par mois (timestamp)
- Fuite données maif - Guide
- Excel trier par ordre croissant chiffre - Guide
- Sauvegarde des données - Guide
- Supprimer les données de navigation - Guide
- Excel validation des données liste - Guide
3 réponses
Bonjour,
Voici la table telle que je l'ai recréée chez moi :
Et voici je pense quelques réponses à vos questions :
Configuration : Fedora 13 virtualisé sur machine hôte CentOS 5.5 (via VirtualBox)
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)
J'ai vu ceci aussi:
mais ça me sort toujours 12... ce qui ne marche pas pcq mes deux nouvelles sont au moins d'aout.
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.