Hej!
Någon som kan hjälpa mig med hur man jämför timestamp? Jag har en tabell i en MySQL och ett fält är timestamp.
Vid en inloggning vill jag radera alla poster som är äldre en viss tid. ex 20 min.
Hur skriver jag detta?
Tack på förhand!
5 svar · 306 visningar · startad av lejzer
Hej!
Någon som kan hjälpa mig med hur man jämför timestamp? Jag har en tabell i en MySQL och ett fält är timestamp.
Vid en inloggning vill jag radera alla poster som är äldre en viss tid. ex 20 min.
Hur skriver jag detta?
Tack på förhand!
$query = "SELECT UNIX_TIMESTAMP(timestampfält) AS created_time";
// Kör sql-satsen
if (strtotime("-20 minutes") > $created_time){
// plocka bort posten
}
Ersätt $created_time med vad fältet i databasen får för namn.
$currenttime = date("YmdHis"); /* Nuvarande tidpunkt */
$deletefrom = $currenttime-2000; /* Tar bort de poster som är äldre än 20 minuter */
$sql = "DELETE FROM tabell WHERE din_timestamp_rad > '$deletefrom'";
Tror jag...
Tack till er båda för era svar, men jag får inte rätt på det ändå.. Det blir inte riktigt rätt format.
Hos mig ser timestampet ut som följer från mysql:en:
021027230854
men formatet som era svar gav mig ser ut så här (Alltså, Nu - 20min):
1035755334
Nån aning?
Tack
Anledningen till att du inte får det att fungera är att du inte kan jämföra ett timestamp ifrån PHP direkt med ett ifrån MySQL.
Timestamp i PHP skrivs som antalet sekunder sedan 1 januari 1970 (s.k. UNIX timestamp), medan timestamp i MySQL skrivs på formen YYYYMMDDHHMMSS (kan förkortas genom att ändra kolumnparametern). För att kunna jämföra dem måste du göra om dem till samma format, och det görs enklast genom MySQL-funktionen UNIX_TIMESTAMP() som du kör på kolumnen.
För att bygga vidare på Webslave's exempel (som är bättre om du bara vill plocka bort de gamla posterna rakt av):
$deletetime = strtotime("-20 minutes");
$sql = "DELETE FROM tabell WHERE UNIX_TIMESTAMP(din_timestamp_rad) < '".$deletetime".'";
EDIT:
Om du försökte dig på Webslave's exempel berodde felet inte på UNIX timestamp, utan andra grejer
1. Du har med årtusende och århundrade i MySQL
2. Det går inte att plocka bort 2000 ifrån strängen för att komma 20 minuter bakåt i tiden
3. Jämförelsen blev på fel håll.