Select tout ce qui se termine dans les 24 heures

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Select tout ce qui se termine dans les 24 heures

par ouckileou » 27 sept. 2005, 19:37

Edit : bon, ben... ça marche !
Ton truc est le bon, c'est bien un mix d'interval 30 day et 24 hour...! =D>

Honnêtement, j'aurais eu beaucoup de mal à trouver !
Merci ! :D
Pourtant, tu avais pensé a INTERVAL dès le début, pour les 24h...
et c'est ça qui m'étonnait, que tu ne veuilles pas le réutiliser pour les 30 jours :lol:

par Overseas » 27 sept. 2005, 19:21

obtenir tous les enregistrements dont la date de création + 30 jours sera expirée dans 24h
Exact...
et au passage, teste d'abord directement ta requête sur la base, sans passer par PHP, mais via phpMyAdmin par exemple
ça t'évitera de gérer le coté PHP pour le moment, et de l'attaquer avec une requête valide ;)
Ok. Bonne idée.

Edit : bon, ben... ça marche !
Ton truc est le bon, c'est bien un mix d'interval 30 day et 24 hour...! =D>

Honnêtement, j'aurais eu beaucoup de mal à trouver !
Merci ! :D

par ouckileou » 27 sept. 2005, 19:12

je ne parlais pas de "date_an + 30" mais de date_add(date_an, INTERVAL 30 DAY)
car effectivement le calcul direct, datetime + nombre me parait un peu léger...(d'où mon interrogation au début de mon précédent message)

mais tu as une fonction qui te donne une date dans le futur, avec le pas que tu veux : secondes, jours, mois... pourquoi ne pas l'utiliser ?

ce qui donnerait :

Code : Tout sélectionner

SELECT tagada FROM Table WHERE DATE_ADD(date_an, INTERVAL 30 DAY) <= DATE_ADD(NOW(), INTERVAL 24 HOUR)
donc je crois que ceci correspond à ce que tu cherches à faire :
obtenir tous les enregistrements dont la date de création + 30 jours sera expirée dans 24h

non ?
et au passage, teste d'abord directement ta requête sur la base, sans passer par PHP, mais via phpMyAdmin par exemple
ça t'évitera de gérer le coté PHP pour le moment, et de l'attaquer avec une requête valide ;)

par Overseas » 27 sept. 2005, 18:58

Le calcul n'est pas encore au point... je devrais avoir 2 enrg. en retour, il ne m'en met plus aucun... avec en plus une erreur classique style :
supplied argument is not a valid MySQL result resource
comme s'il n'avait pas compris la requête... :lol:

Si effectivement et de façon certaine il tient compte des heures & minutes dans ta suggestion, effectivement 30 jours seraient bien...
mais ça m'étonnerait que date_an + 30 soit plus adapté que date_an + 2592000... :wink:

Je dois pas être bien loin de la soluce... :-k

Je viens d'essayer avec :
date_an+30 <= TO_DAYS(NOW()) and date_an+29 >= TO_DAYS(NOW())

Plus d'erreur, mais il ne renvoie aucun enregistrement... :roll:
Bon... je vais laisser reposer deux minutes ! :boire4:

Encore merci pour la contribution ! :merci:

par ouckileou » 27 sept. 2005, 18:44

il prend correctement ce calcul ?
date_an+2592000
moi à ta place je resterai sur le date_add et les intervalles :P

mais je ne comprends pas bien, si tu ajoutes 30 jours à cette date
2005-05-04 15:12:29
tu devrais retomber là-dessus : 2005-06-03 15:12:29

alors pourquoi t'embêter à rajouter un nombre de secondes ?

par Overseas » 27 sept. 2005, 18:40

quel est le format de la date de création stockée ?
datetime bien entendu.
si c'est bien une colonne de type date, pourquoi ne pas utiliser la même fonction date_add pour ajouter 30 jours, plutôt que ce calcul ?
Parce que les annonces sont stockées à la minute près, et non au jour près...

Je suis en train de tester ce genre de chose :
WHERE date_an+2592000 <= DATE_ADD(NOW()) and date_an+2505600 >= DATE_ADD(NOW())

2592000 = 30 jours
2505600 = 29 jours
ce qui pourrait bien convenir... :D

par ouckileou » 27 sept. 2005, 18:36

ok, je croyais que tu avais déjà stocké la date d'expiration

quel est le format de la date de création stockée ?
si c'est bien une colonne de type date, pourquoi ne pas utiliser la même fonction date_add pour ajouter 30 jours, plutôt que ce calcul ?

par Overseas » 27 sept. 2005, 18:19

Possible... mais pour l'instant cela ne marche pas... :oops: (de ma faute probablement :wink: )

Attention, j'ai en fait mis :
$listhese = mysql_query("select code_an, date_an, mbemett_an, rubrique_an, titre_an, sens_an, cp_an, verified_an, photo_an, code_sr, rubrique_sr, titre_sr, depart_an from annonce, sousrub
where rubrique_an = code_sr and date_an+2592000 <= DATE_ADD(NOW(), INTERVAL 24 HOUR)
order by date_an desc limit $transrup, $audelamax") ;

...vu que la date_an est la date d'insertion avec validité de 30 jours.
---> 3600 * 24 * 30 = 2592000

Il me restitue l'ensemble des enregistrements...

par ouckileou » 27 sept. 2005, 18:12

il y a un date_add de trop

puisque c'est pour récupérer tous les enregistrement dont la date est inférieure à maintenant+24h, ce serait plutôt ça :

Code : Tout sélectionner

SELECT tagada FROM Table WHERE<champ_date> <= DATE_ADD(NOW(), INTERVAL 24 HOUR)

par Overseas » 27 sept. 2005, 18:04

Merci pour la réponse très rapide ! =D>

Je vais tester cela...
Oui, je connais bien l'adresse des docs, mais sans exemple concret, c'est parfois un peu dur...! :wink:

par ouckileou » 27 sept. 2005, 17:56

avec ça peut-être :

Code : Tout sélectionner

SELECT tagada FROM Table WHERE DATE_ADD(<champ_date>,INTERVAL 24 HOUR) <= DATE_ADD(NOW(), INTERVAL 24 HOUR)
tu as la liste des valeurs utilisables pour les intervalles dans la doc, et les heures sont dedans :
http://dev.mysql.com/doc/mysql/fr/date- ... tions.html

(après la fonction DATE_ADD)

Select tout ce qui se termine dans les 24 heures

par Overseas » 27 sept. 2005, 17:42

Salut,

j'aimerais donc faire un SELECT sur tout les enregistrements dont la validité (de 30 jours) s'éteint dans les 24 heures.

J'ai évidemment pensé à un SELECT tagada from Table WHERE TO_DAYS(NOW()) - TO_DAYS(date_an) > 28 and TO_DAYS(NOW()) - TO_DAYS(date_an) < 31, mais...

a) ça me donnerait jusqu'à 2 jours d'intervalle
b) il y a peu de chance que ça tienne compte des heures :cry:

J'ai aussi pensé à utiliser les INTERVAL, mais quelle serait la fonction des heures (Interval + 24) ?

Le tout sachant que j'aurais probablement des centaines voire des milliers d'enregistrements à filtrer lors de la requête, donc hors de question de tester en boucle !!! :lol:

Une suggestion simple ?