Date + mktime + requête

Résolu
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011 - 15 nov. 2009 à 19:21
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 15 nov. 2009 à 23:44
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

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 nov. 2009 à 23:44
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 -
3
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
15 nov. 2009 à 20:18
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.
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
15 nov. 2009 à 20:56
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 -
0
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
15 nov. 2009 à 21:18
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à.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
15 nov. 2009 à 23:02
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 ?
0
Rejoignez-nous