2010-10-29 10 views
12

Sto cercando di aggiungere secondi a una data in base a determinati eventi che si verificano. Spesso, se questi eventi si verificano nello stesso momento, vengono aggiunti troppi secondi. Ecco come Attualmente sto facendo in PHP e MySQLAggiunta di secondi a datetime in MySQL

$time_add_on = 15 - $seconds_left; 
DATE_ADD(STR_TO_DATE(end_dt,'%Y-%m-%d %H:%i:%s'), INTERVAL '".$time_add_on."' SECOND 

Che cosa questo sta facendo è prendere i secondi attuali di sinistro da 'end_dt' sottraendo 15 e aggiungendolo al 'end_dt', in pratica si dà 15 secondi dalla fine .

L'obiettivo qui è fondamentalmente troppo aggiungere 15 secondi o ripristinare la data in cui rimangono solo 15 secondi. Questo sta causando problemi, dove invece di resettare a 15 secondi dalla fine, aggiungerà 30 secondi o 45 secondi.

Qualcuno saprebbe il modo migliore per farlo?

risposta

22
UPDATE table end_dt = DATE_ADD(end_dt, INTERVAL 15 second) 
WHERE DATE_SUB(end_dt, INTERVAL 15 second) <= NOW() 

penso che è quello che vuoi, aggiunge fondamentalmente 15 secondi per end_dt quando end_dt è a 15 secondi di distanza da ora

EDIT nuova query Questa query dovrebbe funzionare:

UPDATE `table` 
    SET end_dt = DATE_ADD(end_dt, INTERVAL (15 - TIMESTAMPDIFF(SECOND, NOW(), end_dt)) SECOND) 
WHERE DATE_SUB(end_dt, INTERVAL 15 second) <= NOW() 
+0

Ehi Logan, quindi questo non avrebbe funzionato perché se ci sono rimasti 10 secondi e si aggiungono 15, ci sarebbero rimasti 25 secondi. – dzm