- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- mysql: differenza tra date problemi
-
Ho modificato il codice ma non va lo stesso
<b>Clean Old Messages/Newsletter</b>
<br><br><?
if ($_POST){$tabla5 = mysql_query("SELECT * FROM tb_messenger ORDER BY id ASC"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre
while ($registro5 = mysql_fetch_array($tabla5)) { // comienza un bucle que leera todos los registros y ejecutara las ordenes que siguen$date=$_POST["date"];
$now = time();//Todo parece correcto procedemos con la inserccion
$queryz9 = "DELETE FROM table tb_messenger WHERE ($now - $date) >60)";
mysql_query($queryz9) or die(mysql_error());
}echo "<b>Done.</b><br><br>";
}
?>
This Button Will Clean Old Visits.
<br><br>
<form method="post" action="index.php?op=38">
<input type="hidden" name="clean" value="clean">
<input type="submit" Value="Clean" class="button">
</form></table>
Clean Old Messages/Newsletter
Errore di sintassi nella query SQL vicino a 'table tb_messenger WHERE 1222714662 - >60)' linea 1
Il mysql è in formato timestamp ma non mi fa la differenza lo stesso
se qualcuno puo aiutatrmi ve ne saro grato
-
Tranquillo a tutto c'è soluzione
[php]<b>Clean Old Messages/Newsletter</b>
<br><br><?
if ($_POST)
{
$tabla5 = mysql_query("SELECT * FROM tb_messenger ORDER BY id ASC"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre$olddate=time() - 300000; // abbiamo così il timestamp della data limite, prima di questa cancelliamo tutti gli utenti //adesso dobbiamo trasformarla in data equivalente al Db $olddate= date ("Y-m-d H:i:s", $olddate); $queryz9 = "DELETE FROM tb_messenger WHERE last_login<'$olddate'"; //ammettendo che il campo si chiami last_login mysql_query($queryz9) or die(mysql_error()); echo "<b>Done.</b><br><br>";
}
?>
This Button Will Clean Old Messages/Newsletter.
<br><br>
<form method="post" action="index.php?op=38">
<input type="hidden" name="clean" value="clean">
<input type="submit" Value="Clean" class="button">
</form>[/php]
Vedi se funzionaP.S. Anche se in questo caso non ti serve, se devi trasformare la data del Db in timestamp dovrai procedere così:
2008-09-29 20:34:00 ```per usare mktime() ti serve separare la data a pezzi: giorno, mese, anno, ore, minuti, secondi. io procedo così: sostituisco lo spazio ed i : con il - [php]$date=str_replace(" ", "-", $date); $date=str_replace(":", "-", $date);[/php]in questo modo $data conterrà la nostra data in questo modo
2008-09-29-20-34-00
[php]list($Y, $m, $d, $H, $i, $s) = explode ("-", $date);[/php]a questo punto avrai: $Y=2008 (anno) $m=9(mese) $d=29(giorno) $H=20(ora) $i=34(minuti) $s=0(secondi) adesso puoi utilizzare la funzione mktime() per ottenere il timestamp relativo a questa data la sintassi di mktime() è
int mktime ( int $hour, int $minute, int $second, int $month, int $day, int $year [, int $is_dst] )
[php]$date=mktime($H, $i, $s, $m, $d, $Y);[/php]a questo punto puoi tranquillamente effettuare la tua sottrazione
time() - $date
riepilogo: [php]$date=str_replace(" ", "-", $date); $date=str_replace(":", "-", $date); list($Y, $m, $d, $H, $i, $s) = explode ("-", $date); $date=mktime($H, $i, $s, $m, $d, $Y);[/php]
-
Ciao samy
ho provato la tua pagina ma c'è qualcosa che non va, non cancella correttamente i messaggi.
penso che errore sia in TIME() - 300 (o altro valore)
Ho corretto col nome della colonna che contiene la data varchar
codice pagina
<b>Clean Old Messages/Newsletter</b>
<br><br><?
if ($_POST)
{
$tabla5 = mysql_query("SELECT * FROM tb_messenger ORDER BY id ASC"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre$olddate = time() - 300; // abbiamo così il timestamp della data limite, prima di questa cancelliamo tutti gli utenti //adesso dobbiamo trasformarla in data equivalente al Db $olddate = date ("d-m-Y H:i:s", $olddate); $queryz9 = "DELETE FROM tb_messenger WHERE date<'$olddate'"; //ammettendo che il campo si chiami date mysql_query($queryz9) or die(mysql_error()); echo "<b>Done.</b><br><br>";
}
?>
This Button Will Clean Old Messages/Newsletter.
<br><br>
<form method="post" action="index.php?op=38">
<input type="hidden" name="clean" value="clean">
<input type="submit" Value="Clean" class="button">
</form>Nel database il formato della data è
varchar giorno-mese-anno ora: minuti29-09-08 23:36
E' davvero complicata questa funzione, mannaggia
in ogni caso grazie lo stesso per il lungo lavoro.
provo anche le altre parti dello script sperando di riuscirci.Se hai altri suggerimenti dimmi pure, mi sa che vengo da te direttamento tanto abito vicino
-
Varchar
Beh..andrebbe impostato a DATETIME veramente
altra cosa, le date, per confrontarle, vanno messe obbligatoriamente nel formato inglese
anno-mese-giorno ore:minuti:secondila cosa è trubbola, come si dice dalle mie parti
Sicuro che non è possibile trasformare quella data in Timestamp o almeno in formato inglese? magari modificando lo script...
così la vedo lunga da fare ed in ogni caso scomoda
-
Sono riuscito a trasformare la data cosi:
1222727525
é cosi memorizzata nel database cosi adesso (non ho cambiato niente nel database è sempre varchar ma la memorizza in questo formato)
Con la data cosi si puo fare qualcosa?
IO non capisco neppure come calcolare i giorni in questo formato.
Grazie mille per l'aiuto.
-
cambiala in INT invece di VARCHAR e nello script di prima togli questo pezzo
[php]//adesso dobbiamo trasformarla in data equivalente al Db
$olddate = date ("d-m-Y H:i:s", $olddate);[/php]ora dovrebbe andare
-
Ciao samy
Per evitare di manipolare troppo lo script faccio cosi
- aggiungo una nuova colonna al mysql (tipo INT)
- programmo la query basandomi su questa colonna nuova
Per inserire i dati nella nuova colonna va bene time() ?
Spero di riuscire, grazie per l'aiuto
-
time ti da il timestamp attuale, quindi si
-
Ciao samy
ti confermo che avendo creato un campo timestamp con tipo INT ora la query funziona e cancella i vecchi messaggi, ti ringrazio davvero.
ciao e ancora grazie
-
Di nulla, alla prossima