Page 1 sur 1

afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 12:32
par xzena
bonjour,
j’essaie de faire des requêtes qui me calcule certains montant entre deux dates Entrées..
Mais ce code ne marche pas :
$date_debut=isset($_POST['date_debut'])?$_POST['date_debut']:"";
$date_fin=isset($_POST['date_fin'])?$_POST['date_fin']:"";
	$reketee= mysql_query("select count(code) as num from reference where date_visite between '$date_debut' and '$date_fin' " ;
while($rowe = mysql_fetch_assoc($reketee)){
		$nbree=$rowe['Cbnee'];
		//echo $nbree;
		}
	
Aussi sur phpmyadmin la requete :
select count(code) as num from reference where date_visite between '$date_debut' and '$date_fin' 
me récupéré le Tout sans prendre en considération les dates entrées..
Si quelqu'un peut m'aider merci d'avance.

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 12:40
par xTG
La fonction count() fonctionne sur un regroupement.
A savoir avec le mot clé GROUP BY.
Qu'est ce que tu comptes ?

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 12:41
par Mazarini
il faut qur tu choisisses le format de tes dates et que tu veilles à rester cohérent.

Les fonctions mysql STR_TO_DATE() et FORMAT() permettent de passer d'une chaine de caractères à une date et réciproquement.

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 12:45
par xzena
La fonction count() fonctionne sur un regroupement.
A savoir avec le mot clé GROUP BY.
Qu'est ce que tu comptes ?
je compte le nombre des visites qui sont dans l’intervalle du deux dates entrées.
il faut qur tu choisisses le format de tes dates et que tu veilles à rester cohérent.

Les fonctions mysql STR_TO_DATE() et FORMAT() permettent de passer d'une chaine de caractères à une date et réciproquement.
je teste maintenant sur la même format et pourtant ça marche pas!

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 12:50
par Mazarini
Attention à bien tester avec des chaines année-mois-jour (si tu utilise les chaines de caractères)

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 13:07
par xzena
Justement @Mazarini c'était un problème de format!! alors vu que les formats déja entré dans ma base de donnée sont pas cohérents,cad: y a une table a vec la format: 2011/11/30(type CHAR) et d'autre à l'inverse.
donc tu proposes de convertir le tout en même format via les fonctions:mysql STR_TO_DATE() et FORMAT()
si tu peut m'expliquer de plus ce point là comment faire et merci infiniment :)

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 13:38
par Ryle
Il faudrait surtout revoir la structure de la base de données pour stocker tes dates dans des champs de type "date", sans quoi il sera particulièrement compliqué de les traiter et sera impossible d'utiliser les fonctions standards de manipulation des dates prévues à cet effet :)

C'est un peu lourd comme modification (d'autant qu'il faudra adapté le code pour que les insertions/mise à jour se fasse dans le bon format), mais ça sera un vrai confort pour maintenir et faire évoluer par la suite :) (et puis ta requête ci-dessus devrait fonctionner du premier coup ensuite ;))

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 14:17
par xzena
Il faudrait surtout revoir la structure de la base de données pour stocker tes dates dans des champs de type "date", sans quoi il sera particulièrement compliqué de les traiter et sera impossible d'utiliser les fonctions standards de manipulation des dates prévues à cet effet :)

C'est un peu lourd comme modification (d'autant qu'il faudra adapté le code pour que les insertions/mise à jour se fasse dans le bon format), mais ça sera un vrai confort pour maintenir et faire évoluer par la suite :) (et puis ta requête ci-dessus devrait fonctionner du premier coup ensuite ;))
Merci pour votre réponse,alors Si j'ai bien compris c'est mieux de changer tout type de date depuis varchar à date ? Mais y a pas une méthode automatique pour régler ça??sans modifier sur les tables..c'est déja trop d'enregistrements sont affectés..:s

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 15:05
par Ryle
Ben le mieux c'est effectivement d'adapter le contenant en fonction de son contenu (faut pas servir de la bière dans un shooter, ni de la vodka dans une pinte ;))

Il n'y a pas de méthode toute faite pour convertir tes données, mais le plus simple consiste à créer une nouvelle colonne (ex : ma_nouvelle_date) au format "date". Il te faut ensuite faire un update de ta table en copiant les données du champ date_visite vers ma_nouvelle_date en les formatant AAAA-MM-JJ.

Par exemple, si tes données sont au format AAAA/MM/JJ, tu peux faire simplement :
UPDATE reference SET ma_nouvelle_date = REPLACE('/', '-', date_visite)
Si le format de la date est différent, il faut utiliser des SUBSTR() pour couper la chaine et la réordonner comme il convient avant de mettre à jour ma_nouvelle_date.

Il te suffit ensuite de supprimer ta colonne date_visite (une fois que tu te seras assuré que toutes les dates ont correctement été copiées), puis de renommé ta colonne ma_nouvelle_date en date_visite, et hop... tu as un champ date tout propre, avec lequel tu peux faire du between, datediff(), date_add(), year(), month(), day(), ... :)

Re: afficher ce qui est entre deux Dates

Posté : 27 déc. 2011, 16:21
par xzena
Merci @Ryle pour tout votre aide ;)