Slet automatisk efter 6 måneder

Tags:    php mysql

<< < 12 > >>
Hej
Så har jeg brug for jeres hjælp igen.
Skal bruge lidt hjælp til hvordan jeg kan lave et nedtællingssystem, baseret på oprettelsesdato.
Til et boligsystem skal jeg lave det således at når en bolig er oprettet skrives oprettelsesdato i dato-felt i db.
Når datoen så er 6 måneder forældet skal boligen pr. automatik slettes igen.
Jeg ved at jeg ved oprettelse skal indsætte dato i en variabel vha. date-funktionen, men resten mangler jeg lidt hjælp til.
Det er meget vigtigt at jeg kan lave det i MySQL, da filen, jeg arbejder i, har rigtig mange funktioner i forvejen, og hvis alle disse skal laves om til at understøtte MySQLi, vil det tage en evighed.
Håber der er nogen der kan hjælpe med at lave en sådan funktion med PHP og MySQL.



19 svar postet i denne tråd vises herunder
6 indlæg har modtaget i alt 20 karma
Sorter efter stemmer Sorter efter dato
SELECT * FROM boliger WHERE expire_timestamp >= NOW()

eller

SELECT * FROM boliger WHERE expire_unix_timestamp >= UNIX_TIMESTAMP(NOW())

eller

SELECT * FROM boliger WHERE FROM_UNIXTIME(expire_timestamp) >= NOW()

eller

SELECT * FROM boliger WHERE create_timestamp >= DATE_SUB(NOW() INTERVAL 6 MONTHS)

eller

SELECT * FROM boliger WHERE FROM_UNIXTIME(create_timestamp) >= DATE_SUB(NOW() INTERVAL 6 MONTHS)


... det burde være nogenlunde deromkring. De er skrevet fra hukommelse, så testing, må du klare. :)



Indlæg senest redigeret d. 18.09.2012 16:53 af Bruger #10216
@User Jokke Jensen @ 16.09.12 16:17
her er lidt at kigge på
https://www.google.dk/search?q=mysql+scredule+delete
http://stackoverflow.com/questions/6560639/how-to-schedule-a-stored-procedure-in-mysql
http://dev.mysql.com/doc/refman/5.1/en/create-event.html
http://dev.mysql.com/doc/refman/5.5/en/events-privileges.html
http://mrjoelkemp.com/2011/04/mysql-event-to-remove-expired-data/


@User Kenneth Hansen @ 18.09.12 18:40
burde
$remove = mysql_query("SELECT * FROM `boliger` WHERE `expire_date` >= '$expire'");

ikke være noget med delete ??
$remove = mysql_query("DELETE FROM `boliger` WHERE `expire_date` >= '$expire'");

og så bør du kunne droppe dette
$check_bolig = mysql_query("SELECT * FROM `boliger` WHERE `expire_date` >= '$expire'");
if(mysql_num_rows($check_bolig) > 0) {
$remove = mysql_query("SELECT * FROM `boliger` WHERE `expire_date` >= '$expire'");
}




Du kan lave en funktion der kører en delete SQL kommando, f.eks.
Fold kodeboks ind/udSQL kode 




Det er en af de fordele du kan hente ved at bruge funktioner til at hente din data med, frem for en procedural fremgangsmåde.

Ved at pakke din data query ind i en funktion - bedre endnu, brug objekter - kan du nøjes med at ændre eet sted.

Fold kodeboks ind/udPHP kode 


Kodeeks. er kun een måde at gøre det på. Jeg ville bruge objekter/instancer til dette, frem for alm. funktioner. Men det er en helt anden snak, og så bliver det hurtigt komplekst.

Man kan også bruge cronjobs. Men man behøver ikke, hvis man ikke har behov for periodisk sletning af data. Det du efterlyser kan sagtens klares under alm. pagerequests.



Indlæg senest redigeret d. 13.09.2012 20:55 af Bruger #10216
Det er meget vigtigt at jeg kan lave det i MySQL, da filen, jeg arbejder i, har rigtig mange funktioner i forvejen, og hvis alle disse skal laves om til at understøtte MySQLi, vil det tage en evighed.


Dette er en af de mange rigtig gode grunde til at bruge et Framework, eller for den sags skyld lave sit eget Database Interface som er uafhængig af hvilken database-engine der bliver benyttet.


On-topic:
Evt. bare lav et SQL kald som sletter 6+ måneder gamle opslag for den pågældende bruger når han logger ind.

Der hvor du viser boligerne, lader du bare være at vise 6+ måneder gamle.



Indlæg senest redigeret d. 14.09.2012 14:30 af Bruger #16319

Ja, det kunne være en mulighed, men hvordan kan jeg få den til at forstå at den skal lægge 6 måneder til oprettelsesdatoen?

prøv at google php date + 6 months
http://php.net/manual/en/function.date.php
http://php.net/manual/en/function.strtotime.php
ref http://stackoverflow.com/questions/2625469/php-simplest-way-to-get-the-date-of-the-month-6-months-prior-on-the-first
Fold kodeboks ind/udKode 


eller med datetime.add
http://www.php.net/manual/en/datetime.add.php
Fold kodeboks ind/udKode 




Du kan lave en funktion der kører en delete SQL kommando, f.eks.
Fold kodeboks ind/udSQL kode 


Ja, men hvordan får jeg den så til at slette automatisk når boligen har ligget i databasen i 6 måneder. Det skal jo helst foregå uden menneskelig interaktion. Jeg ved at guloggratis.dk har noget lignende, dog sættes annoncen blot offline efter en bestemt periode og slettes ikke fra systemet. Hvis jeg kan finde ud af hvordan de har lavet deres online/offline vha. datoer, så kan det også gøre det. Det er blot vigtigt at boligerne ikke længere vil være synlig på siden. Fordi så er det blot at lave et oprettelsesdato(DATE) og expirationsdate(DATE) og et status-felt(INT). I status-feltet bruger jeg værdien 1 og 0. Står den på 1 er den aktiv. Står den på 0 er den offline. Problemet er bare at hvis folk gemmer en bolig under favoritter i deres browser, så vil de stadig kunne se boligen, medmindre at jeg i min query, i pågældende fil, tager højde for at status-feltet's værdi.
Så at den ville kunne finde ud af slette sig selv efter 6 måneder ville det være fint. Siden boliga.dk har en sådan funktion, som automatisk sletter efter en bestemt periode. Dog er deres system kodet i ASP.



Mhh... Det hedder vist cron job. Du kan evt. prøve at søge lidt på google omkring dette.



Det er en af de fordele du kan hente ved at bruge funktioner til at hente din data med, frem for en procedural fremgangsmåde.

Ved at pakke din data query ind i en funktion - bedre endnu, brug objekter - kan du nøjes med at ændre eet sted.

Fold kodeboks ind/udPHP kode 


Kodeeks. er kun een måde at gøre det på. Jeg ville bruge objekter/instancer til dette, frem for alm. funktioner. Men det er en helt anden snak, og så bliver det hurtigt komplekst.

Man kan også bruge cronjobs. Men man behøver ikke, hvis man ikke har behov for periodisk sletning af data. Det du efterlyser kan sagtens klares under alm. pagerequests.


Det med at jeg skal ændre i mange filer, er blot fordi at jeg aldrig kan vide hvor folk går hen. De kan jo have en bestemt bolig som favoritter i deres browser, eller for den sags skyld en anden funktion der ligger i en subfolder.
Men det med en funktion ville klart være en god idé
Og det du har lavet kan altså bare ændres, således at den i stedet giver 180 dage(6 måneder) i stedet for 120 dage(4 måneder).
Liget et enkelt spørgsmål. Du skriver time () - 86400. Hvad betyder de 86400. Er det bare sekunder på en døgn? Sådan som jeg husker det, så skal time altid angives i sekunder, og så bruger du * 120 til at gange sekundtallet for et døgn.



<< < 12 > >>
t