Avatar billede overgreat Forsker
14. juli 2005 - 13:26 Der er 7 kommentarer og
1 løsning

solgt skilt i 4 dage, hvorefter række slettes

Hej alle

Jeg har lavet en bil-database.

Jeg mangler hjælp til følgende.

Når bilerne i databasen er solgt kunne jeg godt tænke mig at lave det sådan den står som solgt i 4 dage, hvorefter den sletter sig selv.

Kan man lave det?
Avatar billede foxmulder58 Praktikant
14. juli 2005 - 13:38 #1
Jeg er er ny i PHP sådu skal ikke tage mit svar helt for givet. Jeg tror ikke at posterne kan slette sig selv. Jeg tror du i din mySQL data base skal slette alle poster der er dateret 4 dage tilbage.


Men jeg er ikkke sikker, lad os se hvad de andre PHP eksperter siger.


ha det godt

mvh
Mads
Avatar billede wuggawugga Nybegynder
14. juli 2005 - 13:39 #2
Selvfølgelig kan man det.

Du kan f.eks. sætte et timestamp i tabellen, der markerer hvornår bilen er solgt. Derefter tilføjer du bare et check, der sletter alle biler, hvor denne tid/dato er overskredet med 4 dage.
Avatar billede wuggawugga Nybegynder
14. juli 2005 - 13:41 #3
Du kan self. også bare kun vise de solgte biler, der er solgt inden for de sidste 4 dage.
Avatar billede overgreat Forsker
14. juli 2005 - 13:44 #4
Kan du give et eksempel på hvordan man laver:

Du kan f.eks. sætte et timestamp i tabellen, der markerer hvornår bilen er solgt. Derefter tilføjer du bare et check, der sletter alle biler, hvor denne tid/dato er overskredet med 4 dage.

På forhånd tak
Avatar billede wuggawugga Nybegynder
14. juli 2005 - 14:02 #5
Nu bruger jeg selv postgres, og mit mysql er lidt rustent. Men jeg prøver ;)
Det du skal bruge er, hvor langt tid der er gået fra den tid bilen blev solgt til nu. Nu er tid og dato noget der irriterede mig grænseløst i mine mysql dage, så jeg vil holde mig til unix timestamps, så vi kan regne i sekunder.

du tilføjer en række til din tabel ala det her:

    sold INT UNSIGNED DEFAULT NULL

når en bil bliver solgt skal du opdatere rækken med det nuværende timestamp:

    UPDATE cars SET sold = UNIX_TIMESTAMP() WHERE id = 999;

når du så skal checke om bilen er solgt indenfor 4 dage:

    4 dage = 60*60*24*4 = 345600 sekunder;

    SELECT * FROM cars WHERE (UNIX_TIMESTAMP() - sold) < 345600;

Det kan sikkert gøres smartere i mysql nu om dage, og helt sikkert i postgres. Men her arbejder du kun med tal, som også er nemme at lege med i php.
Avatar billede overgreat Forsker
15. juli 2005 - 22:14 #6
Når du skriver unix-form er det så noget der fungerer på alle platformer?
Avatar billede overgreat Forsker
16. juli 2005 - 17:51 #7
hej wuggawugga

glem lige min sidste kommentar.

Jeg har kigget noget på det. Jeg finder det værende en god ide med timestamp osv.

Den eneste lille ting er at jeg ikke kan se, hvordan jeg får den til at tjekke efter over 4 dage solgte biler hver dag. Som jeg ser løsningerne er jeg nødt til at lave tjekket selv, før jeg kan få dem slettet.

Eller har du en anden genial løsning til denne lille ting.

I samme åndedrag må du meget gerne sende et svar mere, da jeg mener du har givet mig tilfredsstillende hjælp. Mange tak for hjælpen!
Avatar billede wuggawugga Nybegynder
18. juli 2005 - 14:04 #8
Jeg mener at alle platforme kan arbejde med unix timestamps, men jeg er ikke 100% sikker. Det findes ihvertfald i PHP og de fleste SQL databaser.

Jeg ville nok overveje om det er det værd at slette bilerne rigtigt. Det er ofter en god ide at beholde oplysningerne til senere brug, f.eks. statistik eller regnskab.
Jeg ville nok vælge at beholde bilerne i databasen, og bare ikke vise dem der er solgt.

Når du har et tidspunkt der markerer salg, kan du sagtens vælge bare ikke at vise biler der er solgt for mere end 4 dage siden.

Hvis du helt vil slette bilerne, kan du indsætte en DELETE query et eller andet sted i koden, eller bruge et cron-job eller noget lignedne til at køre den en gang imellem.

Selve checket kan du enten lave i PHP, eller i SQL.

MySQL har en funktion her hedder UNIX_TIMESTAMP(), som er den vi skal bruge. Den returnerer det aktuelle timestamp. Den værdi skal du så trække 4 dage fra, som er 345600 sekunder. Det eneste du så skal gøre er at holde det tal op mod salgstidspunktet.

Denne query skulle slette alle biler der er solgt for mece end 4 dage siden.

DELETE FROM cars WHERE (UNIX_TIMESTAMP() - time_sold) < 345600;

Du kan også få et timestamp igennem PHP, med funktionen time()

Du kunne evt. også oprette et view, der filtrerer de solgte biler fra.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester