Avatar billede learner Praktikant
10. november 2005 - 16:08 Der er 15 kommentarer og
1 løsning

slette om x timer i mysql

Hej, jeg vil indsætte et datostempel i et felt i form af et timestamp samt i et andet felt en udløbstid om x timer. For senere (feks om 10 timer) skal den slettes igen.

jeg skal bruge det således:
(slet alle udløbne)
mysql_query("DELETE FROM tabel WHERE (TO_HOURS(NOW())-TO_HOURS(datostamp))>antal_timer ")...
(derefter vises dem der er tilbage...)

Jeg bruger dette et andet sted:
WHERE (TO_DAYS(NOW())-TO_DAYS(datostamp))>antal_dage
Og det er der jeg er inspireret fra..

Virker TO_HOURS() ??

Nogen der kan hjælpe?
Avatar billede bromer Nybegynder
10. november 2005 - 16:13 #1
Kan du ikke burge interval?

DELETE FROM tabel WHERE DATE_ADD(datostamp, INTERVAL 10 HOURS) < NOW()
Avatar billede learner Praktikant
10. november 2005 - 16:21 #2
Tak. Har godtnok aldrig brugt den, men måske ville det virke :o)
Men nu hvor jeg tænker over det...
Jeg ville sådan set helst at den IKKE kigger på den lokale tid, men på unixtid eller hvad det er den hedder. For jeg får besøgende fra mange tidszoner. Måske er det en helt anden løsning jeg i virkeligheden skal bruge. Jeg er lidt tom på ideer må jeg indrømme.

Håber på hjælp :o)
Avatar billede bromer Nybegynder
10. november 2005 - 16:23 #3
Du skal ikke tænkte på tidszoner. Den arbejder med tidspunktet på din server.
Avatar billede learner Praktikant
10. november 2005 - 16:33 #4
Nå, det vidste jeg ik :o) Jeg troede at det var klientens tid.

Jamen så kan jeg jo godt bruge at sætte et automatisk timestamp ved oprettelsen og bare indsætte x timer i antal_timer feltet.

Og så bruge den du foreslog:
DELETE FROM tabel WHERE DATE_ADD(datostamp, INTERVAL 10 HOURS) < NOW()

Er det ik godtnok et timestamp() jeg skal sætte for at det virker? (Altså jeg indstille feltet til automatisk at indsætte timestamp)
Avatar billede bromer Nybegynder
10. november 2005 - 16:36 #5
Du skal bruge en datatype som din database kan genkende som tid. Det vil sige Datetime, date eller timestamp. Læg mærke til at timestamp ikke er et UNIX timestamp. Der kører en debat et andet sted om det at indsætte NOW() i et felt ved indsættelse og det kan man kun gøre hvis det er et TIMESTAMP. Hvis du benytter et timestamp skal du dog være opmærksom på at det bliver opdateret når en række bliver opdateret og derefter vil det altså ikke indeholde det tidspunkt række blev oprettet på.

Jeg vil anbefale dig at du benytter DATETIME typen og indsætter tiden manuelt med NOW() når du opretter rækken.
Avatar billede learner Praktikant
10. november 2005 - 16:37 #6
skal den skrives således:
DELETE FROM tabel WHERE DATE_ADD(datostamp, INTERVAL antal_timer HOURS) < NOW()
Avatar billede bromer Nybegynder
10. november 2005 - 16:37 #7
Du kan se snakken om MySQL og automatisk indsættelse af tidspunkter ved oprettelse på http://exp.dk/spm/663387.
Avatar billede bromer Nybegynder
10. november 2005 - 16:40 #8
Du kan se hvordan DATE_ADD virker på [1]. Query'en

DELETE FROM tabel WHERE DATE_ADD(datostamp, INTERVAL antal_timer HOURS) < NOW()

kan omskrives til "Slet alt hvor <oprettet>+antaltimer er i fortiden@". Det vil altså sige at der er gået længere tid en <antaltimer> fra rækken blev oprettet til nu.

[1] http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
Avatar billede learner Praktikant
10. november 2005 - 16:41 #9
ok jeg indstiller feltet til DATETIME (not NULL) og indsætter med NOW() og så kører det bare :o)

Jeg er nemlig obs på det med at rettelser laver et nyt timestamp :o) Ik altid lige fedt!

Cool :o)
Avatar billede learner Praktikant
10. november 2005 - 16:43 #10
Kanon, det var lige din hjælp jeg havde brug for :o)
Tusind tak for det...

Du skal have nogle point :o)
Avatar billede learner Praktikant
10. november 2005 - 16:59 #11
OV lige på falderebet :o)

kan du os hjælpe mig med dette:
jeg vil gerne noget lign.: .... SORT BY DATE_ADD(datostamp, INTERVAL antal_timer HOURS) DESC

Altså vil jeg gerne have dem med kortest tid tilbage øverst når jeg udskriver.
Kan det lade sig gøre?

Du skal nok få 20 point mere hvis du os løser den :o)

TAKKER :o)
Avatar billede learner Praktikant
10. november 2005 - 21:39 #12
jeg mente selvfølgelig ORDER BY
Avatar billede learner Praktikant
11. november 2005 - 21:15 #13
Hej igen bromer, vil du ik have point?

ps jeg kunne godt bruge din hjælp her:
http://exp.dk/spm/663711

:o)
Avatar billede bromer Nybegynder
11. november 2005 - 22:34 #14
jeg vil da gerne have point.. har ikke set du tilbød :)
Avatar billede learner Praktikant
12. november 2005 - 12:29 #15
tak for hjælpen :o)
Avatar billede bromer Nybegynder
12. november 2005 - 12:39 #16
så lidt
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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