---
title: "Delete from"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/16593-delete-from"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Viking"
published: "2002-01-19T20:21:00.000Z"
updated: "2002-01-21T06:31:00.000Z"
replies: 19
views: 314
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/16593-delete-from"
---

# Delete from

## #1 — Viking, 2002-01-19T20:21Z

Jag vill ta bort alla rader från en tabell (MySQL), säg att den heter viking, som varit där mer än fem minuter. Hur kan man lösa detta?

Detta har jag gjort själv efter vad jag förstått av manualen, men det fungerar inte så bra:

```
$mktime = mktime(date("H"), date("i")+1, date("s"), date("m"), date("d"), date("Y"));
mysql_query("DELETE FROM viking WHERE date > '$mktime'");
```

Nån som har några förslag?  :)

Permalänk: https://www.webforum.nu/p/16593

## #2 — LarsG, 2002-01-19T20:27Z

```
mysql_query("delete from viking where date + interval 5 minute <= current_timestamp")
```

Permalänk: https://www.webforum.nu/p/325941

## #3 — Viking, 2002-01-20T08:12Z

Tack! SKa fixa det när jag kommer hem igen!  :)

Permalänk: https://www.webforum.nu/p/325942

## #4 — FlashX, 2002-01-20T08:24Z

Gjorde en anmälning till nyhetsbrev och använder en funktion som tar bort alla rader som inte aktiverats inom en viss tid. Det verkar som att tabellen får ganska mycket outnyttjat utrymme när man gör så här vilket innebär att tabellen bör optimeras mellan varven.
Du kan lösa det genom att använda funktionen OPTIMIZE. Låt säga att den finns i skriptet och körs direkt efter ovanstående om datumet uppfyller kravet. 

```
mysql_query("OPTIMIZE TABLE viking")
```

Permalänk: https://www.webforum.nu/p/325943

## #5 — Viking, 2002-01-20T10:30Z

Optimeras?

Permalänk: https://www.webforum.nu/p/325944

## #6 — Viking, 2002-01-20T10:42Z

Hmm, detta fungerar inte:

```
mysql_query("DELETE FROM online WHERE ip = '$REMOTE_ADDR'");

$date = time();
mysql_query("INSERT INTO online VALUES( '$REMOTE_ADDR', '$date' )");
mysql_query("DELETE FROM online WHERE date 1 INTERVAL 5 MINUTE <= current_timestamp");
```

Ser ni felet?  :o  :q

Permalänk: https://www.webforum.nu/p/325945

## #7 — SPiN, 2002-01-20T10:53Z

Du har en 1:ta istället för ett plus i din sista SQL-fråga.

Permalänk: https://www.webforum.nu/p/325946

## #8 — Viking, 2002-01-20T10:56Z

Oj  :)

Permalänk: https://www.webforum.nu/p/325947

## #9 — Viking, 2002-01-20T10:58Z

```
mysql_query("DELETE FROM online WHERE ip = '$REMOTE_ADDR'");

$date = time();
mysql_query("INSERT INTO online VALUES( '$REMOTE_ADDR', '$date' )");
mysql_query("DELETE FROM online WHERE date + INTERVAL 5 MINUTE <= current_timestamp");
```

Hmm... $REMOTE_ADDR, visst är det IP-nummret? Eller? Sen funkar inte intervaldeleten heller  :( 

Ja, kolumnerna finns där  ;)

Permalänk: https://www.webforum.nu/p/325948

## #10 — Viking, 2002-01-20T12:45Z

Hmm, ingen som vet något?  :o

Permalänk: https://www.webforum.nu/p/325949

## #11 — LarsG, 2002-01-20T14:58Z

Lägg till lite felhantering

```
mysql_query("DELETE FROM online WHERE ip = '$REMOTE_ADDR'");
$date = time();
mysql_query("INSERT INTO online VALUES( '$REMOTE_ADDR', '$date' )");
mysql_query("DELETE FROM online WHERE date + INTERVAL 5 MINUTE <= current_timestamp") or die(mysql_error());
```

Permalänk: https://www.webforum.nu/p/325950

## #12 — Viking, 2002-01-20T15:17Z

```
You have an error in your SQL syntax near '5 MINUTE <= current_timestamp' at line 1
```

Permalänk: https://www.webforum.nu/p/325951

## #13 — FlashX, 2002-01-20T16:19Z

```
mysql_query("INSERT INTO online VALUES( '$REMOTE_ADDR', '$date' )");
```

 ser inte riktigt ut att följa standarden.
Bör du inte ange i villka kolumner du vill skriva in värdet i?

Permalänk: https://www.webforum.nu/p/325952

## #14 — LarsG, 2002-01-20T16:20Z

Ok, om du testar detta i stället då

```
mysql_query("DELETE FROM online WHERE date_add(date,INTERVAL 5 MINUTE) <= current_timestamp") or die(mysql_error());
```

Det exempel jag skrev kräver 3.23 av Mysql enligt dokumentationen.

Permalänk: https://www.webforum.nu/p/325953

## #15 — LarsG, 2002-01-20T16:22Z

FlashX

Om man gör insert på alla kolumner som finns i tabellen så behöver man inte ange någon kolumnlista. Värdena måste då anges i samma ordning som kolumnerna är definierade.

Permalänk: https://www.webforum.nu/p/325954

## #16 — FlashX, 2002-01-20T16:39Z

Går det inte lika gärna att skriva 

```
$date_out = time()-300;
mysql_query("DELETE FROM online WHERE date < '$date_out '");
```

LarsG, tack, ska lägga det på minnet.

\[r\]
skrev lite fel i koden ovanför

\[Redigerat av FlashX den 20 jan 2002\]

Permalänk: https://www.webforum.nu/p/325955

## #17 — Viking, 2002-01-20T19:09Z

Tack så mycket för hjälpen!

Ska testa nu!  :)

Permalänk: https://www.webforum.nu/p/325956

## #18 — Viking, 2002-01-20T19:29Z

Hmm

```
$date = time() - 300;
mysql_query("DELETE FROM online WHERE date < $date");

mysql_query("DELETE FROM online WHERE ip = '$REMOTE_ADDR'") or die(mysql_error());
$date = time();

mysql_query("INSERT INTO online VALUES( '$REMOTE_ADDR', '$date' )");
```

Det som inte fungerar här är andra queryn där man tar bort alla rader som har ip = $REMOTE_ADDR.

Nån som vet varför?  :q

Permalänk: https://www.webforum.nu/p/325957

## #19 — FlashX, 2002-01-20T22:47Z

Borde fungera tycker man.
Testa om det här fungerar.

```
// timestamp
$date = time();
// timestamp minus utloggningstiden
$date_out = time()- 300;
// datumet i månaden
$date_optimize = date(d);
// Besökarens ip
$ip = $HTTP_SERVER_VARS[REMOTE_ADDR];

// Plocka bort alla ip-nummer som funnits länre än $date_out
mysql_query("DELETE FROM online WHERE date < $date_out");
// Ta bort aktuell besökares ip ifall den redan existerar
mysql_query("DELETE FROM online WHERE ip='$ip'");
// Lägg till aktuell besökares ip
mysql_query("INSERT INTO online (ip, date) VALUES ('$ip', '$date')");
// Optimera tabellen en gång i månaden
if ($date_optimize == 01) {
mysql_query("OPTIMIZE TABLE online");
}
```

Nu är det ju besökarna själva som sköter tillägg/radering av rader och då kommer databasen att växa i takt med antalet besökare. Alla rader som raderats allokeras fortfarande av MySQL även om de inte existerar. Kan därför vara bra att frigöra utrymmet genom att optimera tabellen någon gång ibland.

Eftersom bl.a. flera företag och skolor går ut via en proxy, så blir ju inte denna typen av online-statistik särskilt tillförlitlig men det kanske inte gör något.

\[Redigerat av FlashX den 20 jan 2002\]

Permalänk: https://www.webforum.nu/p/325958

## #20 — Viking, 2002-01-21T06:31Z

Ok, thx

Permalänk: https://www.webforum.nu/p/325959

---

Tråden på webben: https://www.webforum.nu/amne/php/16593-delete-from
