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ä.
<?php $kysely = "DELETE FROM taulu WHERE lisaysaika + 1209600 < " . time();
Poistaa kaiken taulusta "taulu" jossa lisayaika (sekuntteina) + 1209600 (2 viikkoa) on pienempi kuin time().
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..
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.
Käytä vaikka satunnaislukua ja suorita 1/100 todennäköisyydellä, niin kuormittaa vähemmän.
Kiitoksia!
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
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.
Itse laittaisin tuollaisen tietojen poiston cronjobiin pyörimään, kerran päivässä, yöllä kun on hiljaisinta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.