afficher les lignes sur une période de 21 jours.

Eléphanteau du PHP | 27 Messages

22 juil. 2014, 22:05

Bonjour,

Je ne sais pas si c'est possible mais je souhaiterais faire une sélection des lignes de ma base de données selon la colonne "pubdate".

Le but est d'afficher les lignes dont la colonne "ok" est égal à "0" sur une période de 21 jours.

Avec la requête ci-dessous, je n'ai que les périodes de 21 jours depuis la date du jour et donc pas celles plus anciennes
WHERE ok='0' AND pubdate >= CURDATE( ) -21
Au cas où ce serait possible, dites-le moi mais je n'arrive pas à imaginer ce que cela pourrait être parce qu'il faudrait vérifier toutes les dates...

Merci d'avance,

Sub

Mammouth du PHP | 1339 Messages

22 juil. 2014, 22:13

Regarde du coté INTERVAL et SUBDATE : http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 27 Messages

23 juil. 2014, 00:00

Merci :)

J'ai remplacé
AND pubdate >= CURDATE( ) -21
par
WHERE ok='0' AND SUBDATE(  'pubdate', INTERVAL 21 DAY )
Mais cela ne retourne rien... bon j'arrête pour ce soir :D Je poste dès que je trouve la solution

;-)
Sub

Mammouth du PHP | 1339 Messages

23 juil. 2014, 09:17

WHERE ok = 0 AND `pubdate` >= SUBDATE('".date('Y-m-d')."', INTERVAL 21 DAY )
Ton champ pubdate est sous quelle forme ?
Car sinon tu peux faire
strtotime('- 21 days', time());
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 27 Messages

27 juil. 2014, 00:07

le champ pubdate est au format date 0000-00-00

J'ai essayé des requêtes sql mais je sèche... je pense pas qu'il est possible de sélectionner toutes les lignes qui ont "0" dans la colonne "ok" et sur un interval de temps (ici 21 jours).
Cela fonctionne bien sûr sur les 21 derniers jours mais là il me faudrait 21 jours d'écart.

Dès que j'ai le temps je creuse un peu plus

Mammouth du PHP | 1339 Messages

27 juil. 2014, 00:23

21 jours d'écart par rapport a quoi ? :)
`pubdate` <= SUBDATE('".date('Y-m-d')."', INTERVAL 21 DAY )
Ca c'est avant aujourd'hui - 21 jours.
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 27 Messages

27 juil. 2014, 22:30

Sur un laps de temps de 21 jours.

C'est pour gérer les retards de nos élèves.

Je vérifie quels élèves ont minimum 3 retards qui ne sont pas "ok" (pas justifié) et sur un laps de temps de 21 jours.

Avec ma requête SQL ci-joint, je ne vérifie que 21 jours en arrière et le but serait de vérifier sur un laps de temps de 21 jours.
SELECT DISTINCT * FROM studenten, retards WHERE studenten.student_stam = retards.retard_stam AND retards.retard_excuse >= '3' AND retard_ok = '0' AND retard_retdate >= CURDATE( ) -21 group by retards.retard_stam having count(retards.retard_ok) >2 ORDER BY student_naam ASC
Ici il ne retourne qu'un seul laps de 21 jours. D'aujoud'hui à 21 jours avant et je me demandais si il était possible de le faire pour chaque écart de 21 jours.
Exemple : Aujourd'hui, la requête devrait également m'afficher l'élève qui a été en retard 3 fois entre le 10 et le 31 février.

Mais je ne pense pas que cela soit possible :(

Mammouth du PHP | 1339 Messages

27 juil. 2014, 22:41

AND `retard_retdate` BETWEEN MAX(`retard_retdate`) AND DATE_SUB(MAX(`retard_retdate`), INTERVAL 21 DAY)
MAX(`retard_retdate`) permet d'avoir son dernier retard.
Et de savoir si il a eu 3 retard entre son dernier retard et son dernier retard - 21 jours.
Je sais pas si ca marche mais cette logique est interessante
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphanteau du PHP | 27 Messages

27 juil. 2014, 23:18

Il me retourne une erreur sql
#1111 - Invalid use of group function
Mais en effet cela semble être la bonne piste. Je teste et dès que je trouve je poste la solution.

Merci Elie !