2009-09-17 8 views

Répondre

1

Qu'en est-il quelque chose comme ceci:

update your_table 
set visible = 0 
where your_timestamp_field >= UNIX_TIMESTAMP(subdate(now(), interval 1 hour)) 


Comme explication, voici une sélection qui pourrait vous aider:

mysql> select now(), subdate(now(), interval 1 hour), UNIX_TIMESTAMP(subdate(now(), interval 1 hour))\G 
*************************** 1. row *************************** 
              now(): 2009-09-17 18:58:31 
       subdate(now(), interval 1 hour): 2009-09-17 17:58:31 
UNIX_TIMESTAMP(subdate(now(), interval 1 hour)): 1253203111 
1 row in set (0.00 sec) 

ici:

  • maintenant() obtient la date et l'heure
  • le subdate() donne 1 heure avant maintenant
  • et unix_timestamp() convertit que un timestamp unix


Vous pouvez également faire un soustractions de 3600 secondes UNIX_TIMESTAMP(now()), au lieu d'utiliser SUBDATE ... Mais j'aime l'appel SUBDATE: Je trouve plus facile à comprendre que vous IMMEDIATEMENT voulez 1 heure (et non pas un nombre magique comme 3600)

+0

Comment puis-je l'utiliser comme un peu de code PHP? – CLiown

+0

Vous pouvez utiliser cette requête avec 'mysql_query' (ou les équivalents mysqli ou PDO), comme vous le faites maintenant - la seule chose est que vous n'avez pas besoin de faire de calculs du côté PHP: tout est fait par ça une requête. –

0

est ici une façon de le faire entièrement en MySQL

UPDATE foo SET visible=0 
WHERE (UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(timestamp))<3600; 

UNIX_TIMESTAMP() vous donne le nombre de secondes écoulées depuis l'époque, et en soustrayant les secondes d'horodatage des secondes en cours vous donne l'âge en quelques secondes.

0
UPDATE TABLE SET visible = 0 WHERE myTimestamp >= UNIX_TIMESTAMP(CURTIME()) - 3600 
+0

$ myQueryUpdate = "UPDATE mdl_course SET visible = 0 O WH myTimestamp> = CURTIME() - 3600 et metacourse = 0"; Pourquoi cela ne fonctionne-t-il pas? – CLiown