Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL - Php vanhojen tietueiden poistaminen

Sivun loppuun

vph81 [05.11.2009 15:15:33]

#

Moro!

Eli kyseessä Mysql tietokanta, jota ohjaillaan php web-kayttoliittymällä.
Julkaisu-alustana web-hotelli, eli palvelimien ropailu aikas rajoitettua.
Miten on viisain toteuttaa systeemi joka poistaa automaattisesti esim kaikki 2viikkoa vanhat tietueet kokonaan.
Omiakin ajatuksia toki on, mutta haluaisin vähän infoa miten se oikeasti
kuuluisi tehdä.

Macro [05.11.2009 15:19:45]

#

<?php
$kysely = "DELETE FROM taulu WHERE lisaysaika + 1209600 < " . time();

Poistaa kaiken taulusta "taulu" jossa lisayaika (sekuntteina) + 1209600 (2 viikkoa) on pienempi kuin time().

vph81 [05.11.2009 15:39:49]

#

Jep, mutta tarkoitin nyt sitä että laitanko tuon kaltaisen skriptin
heti esim index.php:n alkuun että kun käyttäjä tulee sivuille se suoritetaan
vai onko tähän jokin parempi ratkaisu. Kuormittaako / hidastaako tuo järjestelmää tarpeettomasti, jos se suoritetaan joka kerta kun joku käy sivuilla eli saman päivän aikana vaikka 1000 kertaa. Ajatus oli kuitenkin se ettei tarvitse itse
kuitenkaan käydä sivuilla joka päivä, ainakaan tämän takia. Tuota ratkaisua itsekkin pyörittelin..

Merri [05.11.2009 15:41:07]

#

Kerran päivässä ensimmäisellä sivunlatauksella poistat tarpeettomaksi jääneet rivit. Merkkaat vaan päivämäärän ylös ja tarkistat sitten onko tämänhetkinen päivämäärä isompi.

Grez [05.11.2009 15:41:11]

#

Käytä vaikka satunnaislukua ja suorita 1/100 todennäköisyydellä, niin kuormittaa vähemmän.

vph81 [05.11.2009 15:52:28]

#

Kiitoksia!

Juhis [05.11.2009 15:57:05]

#

Mikäli aika on datetime

DELETE FROM taulu WHERE aika < NOW() - INTERVAL 2 WEEK

Tai jos unix timestampissa, tosin tämä ratkaisua on macron kyselyä hitaampi.

DELETE FROM taulu WHERE FROM_UNIXTIME(aika) < NOW() - INTERVAL 2 WEEK

tsuriga [05.11.2009 16:06:53]

#

EDIT: Komppaan alla olevaa, cronjobiin kerran päivässä.

Tai sitten; Miten olis tuon lisääminen siihen skriptiin, joka noita lisäyksiä myös tekee? Ei tartteis vaivata käyttäjiä.

Triggerillä jotenkin näin:

CREATE TRIGGER rem_old BEFORE INSERT ON taulu FOR EACH ROW DELETE FROM taulu WHERE aika < NOW() - INTERVAL 2 WEEK;

Syntaksista en mene takuuseen ja voi kuulemma kyykyttää kantaa.

Juhis [05.11.2009 17:10:39]

#

Itse laittaisin tuollaisen tietojen poiston cronjobiin pyörimään, kerran päivässä, yöllä kun on hiljaisinta.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta