VikingMedlem sedan maj 20003 652 inlägg 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? :)
------------------
Sprit och hårdrock?
LarsGMedlem sedan dec. 200012 464 inlägg mysql_query("delete from viking where date + interval 5 minute <= current_timestamp")
------------------
essentitia preter non sans multiplicandum
VikingMedlem sedan maj 20003 652 inlägg Tack! SKa fixa det när jag kommer hem igen! :)
------------------
Sprit och hårdrock?
FlashXMedlem sedan nov. 19991 033 inlägg 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")
VikingMedlem sedan maj 20003 652 inlägg Optimeras?
------------------
Sprit och hårdrock?
VikingMedlem sedan maj 20003 652 inlägg 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
------------------
Sprit och hårdrock?
SPiNMedlem sedan mars 20007 896 inlägg Du har en 1:ta istället för ett plus i din sista SQL-fråga.
------------------
SPiN, bjorne.w@telia.com
-- Wise men talk because they have something to say; fools, because they have to say something. --
VikingMedlem sedan maj 20003 652 inlägg Oj :)
------------------
Sprit och hårdrock?
VikingMedlem sedan maj 20003 652 inlägg 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 ;)
------------------
Sprit och hårdrock?
VikingMedlem sedan maj 20003 652 inlägg Hmm, ingen som vet något? :o
------------------
Sprit och hårdrock?
LarsGMedlem sedan dec. 200012 464 inlägg 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());
------------------
essentitia preter non sans multiplicandum
VikingMedlem sedan maj 20003 652 inlägg You have an error in your SQL syntax near '5 MINUTE <= current_timestamp' at line 1
------------------
Sprit och hårdrock?
FlashXMedlem sedan nov. 19991 033 inlägg 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?
LarsGMedlem sedan dec. 200012 464 inlägg 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.
------------------
essentitia preter non sans multiplicandum
LarsGMedlem sedan dec. 200012 464 inlägg 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.
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 20 jan 2002]
FlashXMedlem sedan nov. 19991 033 inlägg 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]
VikingMedlem sedan maj 20003 652 inlägg Tack så mycket för hjälpen!
Ska testa nu! :)
------------------
Sprit och hårdrock?
VikingMedlem sedan maj 20003 652 inlägg 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
------------------
Sprit och hårdrock?
FlashXMedlem sedan nov. 19991 033 inlägg 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]
VikingMedlem sedan maj 20003 652 inlägg Ok, thx
------------------
Sprit och hårdrock?