Verwijder record als datum verstreken is

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Yoeri Achterbergen

Yoeri Achterbergen

18/03/2020 01:58:43
Quote Anchor link
Goede avond,


Ik zou graag wat wijzer willen worden over het volgende.
In mijn tabel heb ik een kolom met datums en wil graag dat deze automatisch doet opschonen.

Heb ik hier een cronjob voor nodig of kan ik dit ook anders triggeren?

Stel je heb 05-12-2020 (pakjesavond) dan moet deze record 06-12-2020 automatisch worden verwijderd.
 
PHP hulp

PHP hulp

26/12/2024 12:10:50
 
Michael -

Michael -

18/03/2020 08:36:37
Quote Anchor link
Volgens mij is dat antwoord prima te Googlen, maar goed. Je moet aan iets denken als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
DELETE FROM tabel WHERE DATEDIFF(now(), datumkolom) > 1;

bron
Gewijzigd op 18/03/2020 09:20:39 door Michael -
 
Rob Doemaarwat

Rob Doemaarwat

18/03/2020 08:47:21
Quote Anchor link
@Michael: Dit is wel een hele "tricky" manier die precies voor "niet vandaag" werkt.

DATEDIFF retourneert het aantal dagen verschil tussen de beide datums (now() = vandaag). Als beide data dus gelijk zijn dan komt hier 0 uit, en dat is "false" ("niet waar") in computerland. Alle andere waarden (1,2,3,-20) zijn niet 0, dus niet false, en dus wel "waar". En die records worden in dit geval gewist.

Zelf houd ik er altijd van om het iets explicieter te doen, dus gewoon:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
delete from `tabel` where `datumkolom` < date();
(alles eerder dan de huidige datum wissen).

Of als je nog een paar dagen extra respijt wilt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
delete from `tabel` where `datumkolom` < date() - interval 2 day;


En ja, ik zou dit met een cronjob doen. D'r zijn legio andere mogelijkheden*, maar die zijn allemaal complexer en minder "betrouwbaar" dan een recht-toe-recht-aan cronjob.

* Bijvoorbeeld in je script checken of je de data voor vandaag al gewist hebt, en zo nee dat dan nog even te doen. Nadelen: 1) de eerste bezoeker van de dag moet extra lang wachten 2) geen bezoekers = geen data gewist.
Gewijzigd op 18/03/2020 08:48:35 door Rob Doemaarwat
 
Ivo P

Ivo P

18/03/2020 10:09:54
Quote Anchor link
Maar,

waarom moet dat opgeschoond worden?

Dat je ze niet meer wilt tonen nadien, is een andere vraag namelijk. Ik snap heel goed dat je ze niet meer wilt tonen.
Maar dat kun je met een simpele WHERE realiseren.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT * FROM tabel WHERE datumevent >= CURRENTDATE;


En weg=weg.

Ik kreeg deze week nog de vraag of we het overzicht van de weekenddiensten van 2019 nog terug konden halen.
Nee dus. Nu was dat gewoon een geuploade file, maar het idee is gelijk: het neemt minimale ruimte in, en misschien wil je komend jaar toch nog weten of Halloween nu wel of niet op de kalender kwam vorig jaar.

Tenzij het om echt een shitload aan data gaat met honderden gebeurtenissen per dag, zou ik ze laten staan.
 
Thomas van den Heuvel

Thomas van den Heuvel

18/03/2020 16:29:35
Quote Anchor link
Topicstarter heeft het over 05-12-2020 en 06-12-2020. Ik hoop voor deze persoon dat 'ie datums ook echt als DATE of DATETIME heeft opgeslagen, anders wordt het nogal bewerkelijk om te bepalen wat in het verleden ligt, of in wat voor tijdsinterval dan ook.

Het fijne van DATE en DATETIME is dat het een tekstuele sortering volgt, waardoor je dus ook dingen op eenzelfde wijze kunt ordenen en sorteren.

Stel dat je 4 maart hebt, en 1 april, dan geldt, als je dit tekstueel vergelijkt:
2020-03-04 < vandaag (2020-03-18) < 2020-04-01
Dit stemt overeen met de natuurlijke verloop van dagen en tijd.

Had je dit opgeslagen als dd-mm-yyyy dan is het volgende aan de hand:
01-04-2020 < 04-03-2020 < vandaag (18-03-2020)
Als je met dit formaat vergelijkingen "in de tijd" doet dan krijg je zelden tot nooit het interval van records waar je naar op zoek bent.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.