Pour un système d’affichage de commandes on m’a demandé de reprendre ceux qui ont eu lieu sur le mois. Il y a sans doute plusieurs manières de procéder mais celle qui semble la plus sensée est d’intégrer des critères directement à une requête SQL.
Pour en venir à ces critères, cela revient à tester si une date se trouve entre le début du mois et aujourd’hui. On peut donc déjà utiliser CURDATE() au niveau d’un WHERE. Il reste à formuler le début du mois. On peut obtenir celui-ci avec la requête suivante:
SELECT DATE_SUB(curdate(),INTERVAL (DAY(curdate())-1) DAY))
— SUBDATE(date, intervalle) permet d’oter un interval de temps.
— INTERVAL défini l’interval de temps fourni en argument
— DAY(curdate())-1 calcul la date actuelle moins 1
Ce qui donne ceci au niveau de la requête finale:
SELECT
FROM orders
WHERE date_commande BETWEEN ( (SELECT DATE_SUB(curdate(),INTERVAL (DAY(curdate())-1) DAY)) ) AND CURDATE()
ORDER BY date_commande DESC
Edit du 1/08/2011: Nanocom souligne à juste titre que la requête peut être simplifiée en utilisant la fonction MySQL MONTH() qui extrait le mois en cours d’une date donnée en argument. Voici la requête mise-à -jour:
SELECT
FROM orders
WHERE MONTH(date_commande) = MONTH(NOW())
ORDER BY date_commande DESC
– James Poulson
@Nanocom: Bonne remarque. En effet, le MONTH() rendrait la requête plus concise et peut être même plus performante. Ici, j’étais parti de l’idée de faire un SELECT des enregistrements remontant sur un nombre donné de jours. Je vais mettre à jour l’article
WHERE MONTH(date_commande) = MONTH(NOW()) peut suffire non ?