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
Det med at jeg skal ændre i mange filer, er blot fordi at jeg aldrig kan vide hvor folk går hen.


Uanset hvor folk kigger på dit site, skal du altid tilstræbe at du kun ændre ét sted i din kode. Dvs. gentagelser i din kode skal samles til en funktion eller en klasse. Er der flere steder i din kode, hvor du henter boliger, kan denne kode samles til en funktion. Er der variation i hvordan din kode henter boligerne de respektive steder, kan dette tilpasses med parametre til din funktion.

86400 = 60 * 60 * 24 = sekunder * minutter * timer

De 120 var en tanketorsk. Skal selvfølgelig være 180. Du kan alternativt bruge mktime(12,0,0,date('m')-6,1,date('Y'));



Ok. Men reeelt kan jeg jo lægge hele funktionen i en seperat fil og så bruge include til at placere den de rigtige steder.
Og den vil så automatisk slette boliger der er 6 måneder henne i deres levetid, fra oprettelsesdato. Så jeg behøver ikke at have udløbsdato i min db.



Jep... men kun hvis det er fast at ALLE boliger udløber efter 6 måneder. Hvis der er nogle der udløber før, eller senere end 6 måneder, skal du gemme en løbetid eller en udløbsdato.




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.

du kan hurtigt lave det om til MysqlI (Procedural style)
ved en "simpel" søg og erstat alle mysql_xxxxx med mysqli_xxxxx, eneste function jeg har lagt mærke til skal laves om er mysql_query($sql, $conn); der hedder mysqli_query($conn, $sql);, læg mærke parameterne $conn og $sql er byttet om.

du kunne overvej at lave en model component over din db, og pakke samtlige sql kald ind i functioner/metoder, der alle ligger i sammen fil, dette gør også vedligeholdelse nemmere, og stor genbrug-barhed

istedet for en slut dato kan du skrive hvor mange dage den har tilbage som aktiv (Time To Live (TTL)), og bare teste på den

pseudo code
hent id og ttl
hvis ttl <=1 slet række med id
ellers tæl ttl 1 ned og opdater ttl

tæl 1 ned
http://bytes.com/topic/mysql/answers/75479-does-mysql-have-something-like-x-x
http://www.visible-form.com/blog/cool-mysql-incrementdecrement-value-tip/





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.


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?



Jeg er ikke lige mysql haj, men hvorfor ikke bare et scheduled event, burde svare til et job på en mssql ?



Ok, nu har jeg forsøgt at lave noget kode til at finde datoen med. Jeg har valideret at den lægger 6 måneder til, ved først at udskrive dags dato og dernæst datoen 6 måneder senere.
Fold kodeboks ind/udPHP kode 

Men hvordan laver jeg så den query der skal frasortere, alle forældede boliger, til sletning?



Ville det nemmeste ikke være at jeg under oprettelse af en bolig så indsætter expire-date i stedet for oprettelsesdato. Så burde jeg kunne indsætte $expire_date = date("Y-m-d", strtotime("+6 months")); som værdien af feltet. Så sætter jeg mit script til at finde alle boliger der har dags dato og slette dem.
Så hvis jeg for 6 måneder siden har oprettet en bolig, så bliver den slettet. Dog skal jeg jo tage højde for at der en bestemt dag ikke kan være nogen besøgende, og så giver det et lille problem, så hvis jeg nu gør således:
Fold kodeboks ind/udPHP kode 

Har testet min kode og det vil ikke slette nogen boliger. Jeg har selvfølgelig tjekket at den skriver dags dato med date()-funktionen, og ja det gør den, Den skriver ganske rigtigt 2012-09-18, nøjagtigt som jeg har angivet.



Jo, der har du ret. Tja, tror jeg har skrevet for mange SELECT-querys over det sidste stykke tid, så derfor har jeg nok skrevet forkert.
Da jeg lod hele mit if(mysql_num_rows... stå ville den ikke slette. Så fjernede jeg alt, så jeg kun havde dette tilbage:
Fold kodeboks ind/udPHP kode 

Efter at have lavet en refresh af siden, og tjekket i phpmyadmin, kunne jeg konstatere at de boliger der lå i systemet, som have i expire_date til og med dags dato, var blevet slettet.
Jeg takker mange gange for jeres hjælpsomme svar.



<< < 12 > >>
t