afficher ce qui est entre deux Dates

Eléphant du PHP | 187 Messages

27 déc. 2011, 12:32

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.

ViPHP
xTG
ViPHP | 7331 Messages

27 déc. 2011, 12:40

La fonction count() fonctionne sur un regroupement.
A savoir avec le mot clé GROUP BY.
Qu'est ce que tu comptes ?

ViPHP
ViPHP | 2577 Messages

27 déc. 2011, 12:41

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.

Eléphant du PHP | 187 Messages

27 déc. 2011, 12:45

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!

ViPHP
ViPHP | 2577 Messages

27 déc. 2011, 12:50

Attention à bien tester avec des chaines année-mois-jour (si tu utilise les chaines de caractères)

Eléphant du PHP | 187 Messages

27 déc. 2011, 13:07

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 :)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 déc. 2011, 13:38

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 ;))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 187 Messages

27 déc. 2011, 14:17

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 déc. 2011, 15:05

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(), ... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 187 Messages

27 déc. 2011, 16:21

Merci @Ryle pour tout votre aide ;)