webForumDet fria alternativet

jämföra timestamp

5 svar · 306 visningar · startad av lejzer

lejzerMedlem sedan juni 2002263 inlägg
#1

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!

dectgapMedlem sedan sep. 20021 655 inlägg
#2
$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.

WebslaveMedlem sedan maj 2002647 inlägg
#3
$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...

lejzerMedlem sedan juni 2002263 inlägg
#4

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

dectgapMedlem sedan sep. 20021 655 inlägg
#5

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.

lejzerMedlem sedan juni 2002263 inlägg
#6

Perfekt, nu löste det sig!

Tack för hjälpen!

/ Martin

122 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
119 ms — hämta tråd, inlägg och bilagor (db)