MySQL : requete suivant le mois en cours - PHP - Programmation
Marsh Posté le 02-08-2005 à 13:20:28
bon.. j'ai fait ça :
Code :
|
et ça :
Code :
|
.... ça marche on dirait !
mais les années bisextiles... c mort pour l'instant
Marsh Posté le 02-08-2005 à 13:21:05
pour mktime,
si tu met :
Code :
|
tu retourne le dernier jour du moi de juin ...
donc, pour toi, entre
Code :
|
@+
ps: je t'invite a lire la doc sur la fonction mktime, c'est expliquer dedans.
ps² extrait de la doc :
Citation : Le dernier jour d'un mois peut être décrit comme le jour "0" du mois suivant, et non pas le jour -1. Les deux exemples suivants vont donner : "Le dernier jour de Fevrier 2000 est: 29". Exemple 2. Dernier jour du mois
|
Marsh Posté le 02-08-2005 à 13:25:23
Le probleme ne se pose pas vraiment ... pour avoir les données d'un mois fixé tu vas prendre les dates entre le 1er du mois ke tu souhaites et le 1er du mois suivant !
Si tu t'arretes au 30 ou 31 (sans compter fevrier) tu ne prends pas en compte ce dernier jour !
Bref tu te complikes la vie pour rien d'autant plus que ta solution est fausse !
Ta solution avec between et mktime est la bonne et il faut prendre entre le 1er des deux mois !
Marsh Posté le 02-08-2005 à 13:25:51
Ce serait pas plus simple d'utiliser les fonctions de MySQL ?
SELECT * FROM table WHERE YEAR(date)=YEAR('$date') AND MONTH(date)=MONTH('$date')
Quitte à "calculer" le mois et l'année en PHP
SELECT * FROM table WHERE YEAR(date)=2005 AND MONTH(date)=06
Marsh Posté le 02-08-2005 à 13:44:07
bon bah voila avec les années bisextiles ça donnerait ça :
Code :
|
c un peu de la bidouille je trouve.. mais ça marche non ?
Marsh Posté le 02-08-2005 à 13:51:16
pourquoi pas simplement :
Code :
|
ca fonctionne pareil et c'est 10 lignes de moins.
@+
Marsh Posté le 02-08-2005 à 14:22:31
y'a aussi DATE_FORMAT(Champ, Format) en Mysql qui est bien pratique pour formater les timestamps
Comme format, on peut mettre '%Y-%m-%d' par ex
Marsh Posté le 02-08-2005 à 14:24:48
mrbebert a écrit : Ce serait pas plus simple d'utiliser les fonctions de MySQL ? |
Mais l'inconvénient, c'est que tu vas scanner toute la table. Un calcul en PHP avec un beetween dans la requête, sera certainement moins lourd.
Marsh Posté le 02-08-2005 à 15:02:35
bl@p_psx a écrit : pour mktime,
|
effectivement ça pourrait etre plus simple comme ça... j'avais pas vu ce passage
Marsh Posté le 02-08-2005 à 15:02:50
kalex a écrit : |
...between DATE_FORMAT(...) and DATE_FORMAT(...)...
Marsh Posté le 02-08-2005 à 15:06:03
cela me suffit amplement :
Code :
|
Marsh Posté le 02-08-2005 à 15:08:13
voilà ! là c'est bcp plus simple
Marsh Posté le 02-08-2005 à 15:09:50
... je pense que je vais rester là dessus... les fonctions MYSQL j'ai regardé la doc... mais ça me parle pas bcp... là au moins ça marche... donc c ok !
merci à tous !
Marsh Posté le 02-08-2005 à 17:04:31
kalex a écrit : |
En quoi le BETWEEN va permettre de ne pas scanner toute la table
Marsh Posté le 02-08-2005 à 17:18:38
mrbebert a écrit : En quoi le BETWEEN va permettre de ne pas scanner toute la table |
C'est pas le BETWEEN qui fait la différence. Par contre, si tu demandes de sortir toutes les dates entre telle date et telle date sous une forme utilisable par MySQL, les index sont utilisables. Par contre si tu utilises une fonction MySQL sur un champ (ici MONTH et YEAR), toute la table doit être traitée pour obtenir une valeur utilisable dans la condition.
Marsh Posté le 02-08-2005 à 17:28:20
Oui, certes ... en supposant que le champ "date" soit indexé
Marsh Posté le 31-08-2005 à 11:42:40
coucou... je remets un sujet sur le tapis... voila.. aujourd'hui on est le 31... mon boss vient d'utiliser mon prog de facturation.. et toutes les factures qui sont crées aujourd'hui sont bien dans la bdd mais n'apparaissent pas !!!
Code :
|
et en sql :
Code :
|
quoi qui se passe ?
Marsh Posté le 31-08-2005 à 11:53:01
Fais un "echo $sql" pour voir à quoi ressemble la requête
(et déterminer si le problème vient des données ou de la construction de la requête en PHP)
Marsh Posté le 31-08-2005 à 12:50:47
bah j'ai changé la date directement dans phpmyadmin en 1125417600 (qui veut dire le 30/08/05 à 18h00) .. et là ma facture reapparait dans la liste du mois d'Aout ! .. donc ya bien un prob avec les dates concernant le dernier jour du mois !
Marsh Posté le 31-08-2005 à 12:55:04
voici la syntaxe SQL pour le mois d'Aout:
Code :
|
et voici le timestamp du 31/08/05 à 18h00
1125504000
Marsh Posté le 31-08-2005 à 13:01:50
donc la seule solution que je trouve c'est de tricher.. en ajoutant 86399 secondes au dernier jour du mois....
Code :
|
la requete SQL deviendra donc :
SELECT * FROM factures WHERE type='facture' AND date_reg BETWEEN '1122847200' AND '1125525599' ORDER BY numero_facture DESC
Marsh Posté le 31-08-2005 à 13:06:28
suis-je bête !!! encore mieux.. sans tricher :
Code :
|
Marsh Posté le 02-08-2005 à 12:35:30
Bonjour,
J'ai enregistré des dates avec un timestamp... et je voudrais extraire les informations en fonction du mois et de l'année...
par exemple si je choisi juin2005 il me sort tous les enregistrements du 01 juin au 31 juin 2005...
je voulais savoir comment je dois gerer les dates sachant qu'il y a des mois de 28,29,30 et 31 jours... existe-t-il des fonctions php ou mysql qui gère ça tout seul pour faire ma requete qui devrait ressembler à un
"select * from table where date='$date'"
j'avais pensé à un truc genre...
"select * from table where date between '$date1' and '$date2'"
mais je sais pas comment definir $date1 et $date2... sauf en faisant des mktime(0, 0, 0, 06, 1, 2005) et mktime(0, 0, 0, 06, 31, 2005)
... mais comment faire pour indiquer qu'un mois comporte que 30 jours par exemple sans etre obligé de corriger la requete moi même?
Message édité par freed102 le 02-08-2005 à 12:36:29
---------------
Freed102