Avatar billede nizo Nybegynder
08. maj 2005 - 13:29 Der er 50 kommentarer og
1 løsning

Slet med interval?

Jeg skal bruge en kode der sletter efter et bestemt antal dage, jeg har hørt noget om INTERVAL men ved ikke hvordan jeg skal bruge det =/
Avatar billede barklund Nybegynder
08. maj 2005 - 13:31 #1
Sletter hvad? Noget i en database? Filer? Variabler? Lidt mere info er nødvendigt...
Avatar billede nizo Nybegynder
08. maj 2005 - 13:33 #2
Ja self. glemte jeg sry.. SQL sætning der sletter en row i db'en efter et bestemt antal dage.. Meget gerne hvis man ka den til at slette ét felt med en UPDATE evt..
Avatar billede barklund Nybegynder
08. maj 2005 - 13:39 #3
eh? Man kan sagtens slette rækkerne - men ikke med update? Og jeg gætter på, at du snakker mysql, uden du egentlig har nævnt det :)

Det er noget med:

DELETE FROM footable WHERE footimestamp < DATE_SUB(NOW(), INTERVAL 3 DAY)

Sletter alle rækker fra footable, hvor footimestamp angiver et tidspunkt der er mere end 3 dage siden.

--
Morten Barklund
Avatar billede nizo Nybegynder
08. maj 2005 - 13:45 #4
Ja MySQL..

Ka man ikke lave en:

UPDATE footable SET detderskalupdates = '$detderskalupdates' WHERE footimestamp < DATE_SUB(NOW(), INTERVAL 3 DAY)

?
Avatar billede barklund Nybegynder
08. maj 2005 - 13:47 #5
Sagtens
Avatar billede nizo Nybegynder
08. maj 2005 - 13:51 #6
footimestamp, jeg er ikke helt med paa hvilken værdi den har, ska det være noget i db'en eller?
Avatar billede barklund Nybegynder
08. maj 2005 - 13:53 #7
Ja, du er nødt til at have et felt i databasen, der er en DATE eller en DATETIME - som du så indsætter et tidspunkt i. Ellers ved du ikke, hvornår rækken er lavet.
Avatar billede nizo Nybegynder
08. maj 2005 - 13:58 #8
ok det lyder fornuftig nok.. Jeg prøver..
Avatar billede nizo Nybegynder
08. maj 2005 - 14:02 #9
Men hvordan ved den at det er dage?
Avatar billede nizo Nybegynder
08. maj 2005 - 14:07 #10
$d = mysql_query("UPDATE profiler SET sdage = '$r' < DATE_SUB(NOW(), INTERVAL '$day' DAY) WHERE id = '$id'");


Jeg vil lige hører om man kan gøre det saadan?
Avatar billede barklund Nybegynder
08. maj 2005 - 14:12 #11
Det giver ingen mening? Hvad vil du?
Avatar billede nizo Nybegynder
08. maj 2005 - 14:13 #12
Det hele idén er:
Man skriver et tal i en form i HTML som skal staa for dage, naar de dage er gaaet er der noget der skal fjernes..
Avatar billede barklund Nybegynder
08. maj 2005 - 14:17 #13
Så indsætter du ikke antal dage men derimod udløbstidspunktet, når du submitter formularen. Altså du indsætter i et DATETIME felt dags dato plus det antal dage, som brugeren indtaster i feltet.

Du skal da have et felt i din database, som er af typen DATETIME eller bare DATE (hvis det ikke er på det præcise tidspunkt, men bare på dagen). Så indsætter du ved at skrive noget med DATE_ADD(NOW(), INTERVAL $day DAY) - altså nu plus $day dage.
Avatar billede nizo Nybegynder
08. maj 2005 - 14:19 #14
Jeg forstaar ikke rigtigt =/
Avatar billede barklund Nybegynder
08. maj 2005 - 14:21 #15
Jeg har da skåret det helt ud i pap og forklaret det i detaljer? Hvad du hvad en database er? Et felt i en tabel? Feltets type? Hvordan man indsætter?
Avatar billede nizo Nybegynder
08. maj 2005 - 14:24 #16
Jaja, men jeg fatter ikke hvordan det skal staa i mysql_query'en =/
Avatar billede barklund Nybegynder
08. maj 2005 - 14:26 #17
Så du har ændret feltets type? Hvilket felt? Hvordan ser din tabel-struktur ud? Hvordan indsætter du lige nu resultatet af din form?
Avatar billede nizo Nybegynder
08. maj 2005 - 14:47 #18
Bare en alm form

<form action="" method="post">
<input type="text" name="dage">
</form>

Ikke andet..

og saa i php filen er min query:
$update_profil = mysql_query("UPDATE profiler SET sdage = '$days' WHERE id = '$id'");
Avatar billede barklund Nybegynder
08. maj 2005 - 14:49 #19
Ja, så skal du lave dit felt sdage om til en DATE eller en DATETIME (efter ovenstående argumentation). Du kan godt lave et felts type om, ikke?
Avatar billede nizo Nybegynder
08. maj 2005 - 14:51 #20
HTML'er lige meget det er bare hvordan jeg indsætter det i db'en og hvordan feltet i db'en skal se ud præcis :S jeg blev lidt forviret af det andet
..
Avatar billede nizo Nybegynder
08. maj 2005 - 14:55 #21
Jaja..
Men hvad med mysql queryen?
Avatar billede barklund Nybegynder
08. maj 2005 - 15:05 #22
Så laver du det om til:

mysql_query("UPDATE profiler SET sdage = DATE_ADD(NOW(), INTERVAL $days DAY) WHERE id = '$id'") or die("fejl: ".mysql_error());

--
Morten Barklund
Avatar billede nizo Nybegynder
08. maj 2005 - 15:13 #23
Hvis jeg skriver 4 i feltet ser det bare saadan her ud i db'en 2005-05-04
Avatar billede nizo Nybegynder
08. maj 2005 - 15:27 #24
Kan man ikke lave noget hvor man plusser $days variablen med datoen og saa faar den dag det udløber paa?
Avatar billede barklund Nybegynder
08. maj 2005 - 15:31 #25
Sikker på, at du har DATE_ADD? Og ikke den DATE_SUB som vi brugte til noget andet tidligere? Og jo, det er netop for at få den dag, det udløber.
Avatar billede nizo Nybegynder
08. maj 2005 - 15:33 #26
Der staar DATE_ADD i koden..
Avatar billede barklund Nybegynder
08. maj 2005 - 15:35 #27
Hvis jeg skriver

SELECT DATE_ADD(NOW(), INTERVAL 4 DAY)

Så får jeg korrekt 12. maj - og ikke 4. maj. Jeg ved ikke, hvorfor du får 4. maj.
Avatar billede nizo Nybegynder
08. maj 2005 - 15:43 #28
Hvordan gør du da?
Avatar billede barklund Nybegynder
08. maj 2005 - 15:45 #29
Skriver:

SELECT DATE_ADD(NOW(), INTERVAL 4 DAY)

I PHPMyAdmin...

Prøv engang at hardcode det som:

mysql_query("UPDATE profiler SET sdage = DATE_ADD(NOW(), INTERVAL 4 DAY) WHERE id = '$id'") or die("fejl: ".mysql_error());

Og så se, hvad du så har i din tabel bagefter.
Avatar billede nizo Nybegynder
08. maj 2005 - 15:47 #30
Ja saa staar der d. 12 maj :S
Avatar billede nizo Nybegynder
08. maj 2005 - 15:52 #31
Jeg har fundet fejlen.. Havde lavet en forkert variabel.. Den gjorde saa den minusede antal dage man valgte med denne dags dag :S
Men nu virker det!
Avatar billede barklund Nybegynder
08. maj 2005 - 15:52 #32
Og hvis du skifter tilbage til:

mysql_query("UPDATE profiler SET sdage = DATE_ADD(NOW(), INTERVAL $_POST[dage] DAY) WHERE id = '$id'") or die("fejl: ".mysql_error());

Kommer der så ikke en dato præcis det antal dage efter idag, som du indtaster i feltet?
Avatar billede nizo Nybegynder
08. maj 2005 - 15:52 #33
Men jeg er lidt i tvivl hva gør koden nu naar der er gaaet de 4 dage?
Avatar billede barklund Nybegynder
08. maj 2005 - 15:54 #34
Den gør ikke noget. Du skal stadig have et script, der så tester, om tiden nu er gået. Men det er jo ret nemt ved at teste, om sdage = NOW() i en where. Hvad den så skal gøre og hvordan du så får scriptet til at køre ofte nok (så du kalder det den rigtige dag) ved jeg jo ikke - jeg kender ikke din struktur.
Avatar billede nizo Nybegynder
08. maj 2005 - 15:54 #35
Fjerner den det man har sat ind efter de fire dage?
Avatar billede nizo Nybegynder
08. maj 2005 - 15:58 #36
Jeg har en liste, hvor det hele bliver listet, ka man ikke lave noget der?
Med ex. man henter ud, tjekker om tiden er gaaet hvis den er bliver det fjernet?
Avatar billede barklund Nybegynder
08. maj 2005 - 16:10 #37
Den kan man sagtens. Men er tiden gået på dagen eller først dagen efter?
Avatar billede nizo Nybegynder
08. maj 2005 - 16:11 #38
Paa dagen, naar klokken slaar 00:01 og datoen skifter ;o)
Avatar billede barklund Nybegynder
08. maj 2005 - 16:20 #39
Du kan ikke få det til at køre klokken 00:01. Men du kan køre det næste gang nogen kigger på siden - så vil ingen komme til at se gamle data.

Og det kan du gøre meget simpelt ved:

DELETE FROM profiler WHERE sdage <= NOW()

Men det er nok ikke det, du vil - altså slette dine profiler.

--
Morten Barklund
Avatar billede nizo Nybegynder
08. maj 2005 - 16:21 #40
ok Det lyder fint! Jeg prøver..
Avatar billede nizo Nybegynder
08. maj 2005 - 16:26 #41
Damit!
Den har lige slettet ALT i min table :S :'(
Avatar billede barklund Nybegynder
08. maj 2005 - 16:29 #42
Ja, alle dem, der ikke havde en dato i fremtiden blev jo slettet. Men man udvikler jo heller ikke på en live (vigtig) database, som man ikke har en backup af :)
Avatar billede nizo Nybegynder
08. maj 2005 - 16:31 #43
Hvordan skal jeg gøre for at faa det tilbage?
Avatar billede barklund Nybegynder
08. maj 2005 - 16:34 #44
Nu har du jo slettet det. Hvis du ikke har en backup, så er det nok væk. Men helt ærligt, du udvikler vel ikke på vigtige data uden backup? Og jeg skrev jo netop, at det nok ikke var det du ville.
Avatar billede nizo Nybegynder
08. maj 2005 - 16:35 #45
Det er ikke vildt vigtige, men alligevel..
Avatar billede barklund Nybegynder
08. maj 2005 - 16:38 #46
Man tester ikke en DELETE FROM på data man skal bruge, uden lige at sikre sig, at det er de rigtige ting, der slettes...
Avatar billede nizo Nybegynder
08. maj 2005 - 16:42 #47
Jeg har faaet af vide at min webhotel tager dagligt backup..
Avatar billede barklund Nybegynder
08. maj 2005 - 16:44 #48
Så skal du nok spørge dem, om du kan få en backup af tabellen profiler i databasen X tilhørende brugeren Y fra natten mellem lørdag og søndag. Så kan de nok hjælpe dig engang i morgen, hvis du er heldig :)
Avatar billede nizo Nybegynder
08. maj 2005 - 18:46 #49
De vil have betaling for det :'(
Avatar billede barklund Nybegynder
08. maj 2005 - 19:13 #50
Well :)
Avatar billede nizo Nybegynder
21. maj 2005 - 23:39 #51
Jeg har helt droppet det, nu..
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