Date + mktime + requête

[Résolu]
Signaler
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011
-
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
Bonjour,

j'ai toujours eu du mal avec la notion de temps mais...

Voilà le concept. A l'insertion d'un élément de ma table j'insert le temps (ON UPDATE CURRENT_TIMESTAMP ce qui donne => 2009-11-15 19:10:02).
Puis je souhaite faire une requête de suppression si cela fait 4 heures que cet enregistrement n'a pas été mis à jour.
$limit = date('Y-m-d H-i-s', mktime(date('H'), date('i')-240, date('s'), date('m'), date('d'), date('Y')));
$cleanSQL = $this->db->prepare('DELETE FROM '.TB_SESSION.' WHERE last_modified > :limit AND sid= :sid');
$cleanSQL->execute( array(':limit' => $limit,':sid' => session_id()) );

La suppression se fait je ne suis pas sûr d'avoir construit $limit de la bonne manière surtout au niveau de last_modified > :limit

C'est classique mais...
Donc merci.

5 réponses

Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Oui, mais faire ça dans la requête SQL comme je te le proposai est encore mieux, c'est plus simple et plus rapide.

En ce qui concerne l'ajout de temps voit du côté de la fonction mySQL DATE_ADD()


Cordialement,


Kohntark -
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

Dans le même style car je retourne dans tous les sens. Si je veux mettre 4 heures de plus à last_modified qui est sous la forme 2009-11-15 19:10:02 comment puis-je faire ??

merci d'avance.
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Pourquoi ne pas faire simple ?
DELETE FROM '.TB_SESSION.' WHERE last_modified < DATE_SUB(NOW(), INTERVAL 4 HOUR);

Au moins comme ça tu ne te prends pas la tête, tu laisses le boulot à mySQL.

La suppression se fait

... mal sans doute

J'imagine que ta colonne est du type TIMESTAMP, non ?
Tu aurais sans doute intérêt à passer tout ça en DATETIME.

Si comme je le crois tu es en TIMESTAMP il s'agit d'un nombre de secondes :
le timestamp actuel (enr.0) : 1258314427
et maintenant (enr.1) : 1258314444
et maintenant (maintenant) : 1258314460

Si je veux virer les enregistrements de plus de 30 secondes (en estimant que maintenant soit 1258314460)
1258314460 - 30 = 1258314430
Les enregistrements plus vieux sont donc inférieurs à 1258314430, ce qui est le cas de l'enr.0

et toi tu fais l'inverse ...


Cordialement,




Kohntark -
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

Au niveau de mysql, c'est un timestamp -> ON UPDATE CURRENT_TIMESTAMP sous le format 2009-11-15 19:10:02. Donc quand je l'affiche :

$infos_utilisateur['last_modified']

Ca me donne 2009-11-15 20:51:22.

D'où mon pb pour rajouter 30 minutes par exemple. Mais je vais essayer ta fonction pour voir.

j'ai bien sur essayé $infos_utilisateur['last_modified']+30 mais non bien sûr ...

Merci déjà.
Messages postés
86
Date d'inscription
mercredi 31 janvier 2007
Statut
Membre
Dernière intervention
22 novembre 2011

En fait ta raison, il suffisait que je change en :
$limit = date('Y-m-d H-i-s', mktime(date('H'), date('i')-240, date('s'), date('m'), date('d'), date('Y')));
$cleanSQL = $this->db->prepare('DELETE FROM '.TB_SESSION.' WHERE last_modified < :limit AND sid= :sid');
$cleanSQL->execute( array(':limit' => $limit,':sid' => session_id()) );


c'est bien ça ?