Avatar billede dumazz Nybegynder
02. marts 2003 - 22:53 Der er 32 kommentarer og
2 løsninger

varighed at row i MySQL

Hej Expert, kan man sætte et input til mySQL til at slette sig selv efter et givet antal dage ?
Avatar billede lillebror Nybegynder
02. marts 2003 - 22:54 #1
Du kan vel bare lave en række der angiver datoen for oprettelse, også i dit script sørge for, at når folk besøger siden, så sletter den lige alle dem der er ældre end det tilladte
Avatar billede dumazz Nybegynder
02. marts 2003 - 22:55 #2
ja det ved jeg, og det er tilfældet nu, men er der ikke en smartere måde at gøre det på ?
Avatar billede dumazz Nybegynder
02. marts 2003 - 22:56 #3
kan du evt skrive hvordan en sådan sætning skal se ud ?
pt. tømmer jeg tablen hver dag.... i så skide smart :o)
Avatar billede lillebror Nybegynder
02. marts 2003 - 23:04 #4
du har en dato i din tabel der hedder date("YmdHis");

$dateToday = date("YmdHis");

$query = mysql_query("select * from tabel");
while($getter = mysql_fetch_array($query)){
$diff = $getter[datoCreated]-$dateToday;
if($diff > 30){
mysql_query(delete from tabel where id='$getter[id]');
}

Sådan noget lignene det der
}
Avatar billede dumazz Nybegynder
02. marts 2003 - 23:06 #5
altså sletter den dem hvis de er over 30 dage gamle, forstået rigtigt ?
Avatar billede jpvj Nybegynder
02. marts 2003 - 23:07 #6
Noget i stil med
DELETE FROM mytable WHERE createdate<now()-expiredays

Jeg har ikke lige nærlæst mysql manuelen, men du skal altså have en kolonne "createdate" i din tabel, hvor du skriver now() når du opretter rækken. Kolonnen skal have et datetime format.

"createdate<now()-expiredays" laver du naturligvis i PHP med de korrekte værdier/formater. Dette skulle være let at finde med de indbyggede dato funktioner i PHP.

JP
Avatar billede dumazz Nybegynder
02. marts 2003 - 23:07 #7
og det er kun dage ikke timer minutter & sekunder jeg skal bruge
Avatar billede jpvj Nybegynder
02. marts 2003 - 23:09 #8
dumazz> Hvor lader du ikke DBMS klare det? Det er meget "uøkonomisk" at gøre det manuelt.
Avatar billede jpvj Nybegynder
02. marts 2003 - 23:09 #9
Sorry - det var en kommentar til lillebror og ikke til dumazz.
Avatar billede dumazz Nybegynder
02. marts 2003 - 23:09 #10
jeg har lavet sådan at php sender dags dato med når rækken laves.... men resten du skriver skal jeg vist lige ha igen....
Avatar billede dumazz Nybegynder
02. marts 2003 - 23:11 #11
ja det er jo oz derfor jeg har postet dette spm, for at finde ud af en nemmere måde at gøre det på...
Avatar billede lillebror Nybegynder
02. marts 2003 - 23:19 #12
du har en dato i din tabel der hedder date("z");

$dateToday = date("z");

$query = mysql_query("select * from tabel");
while($getter = mysql_fetch_array($query)){
$diff = $dateToday-$getter[datoCreated];
if($diff > 30){
mysql_query(delete from tabel where id='$getter[id]');
}
}

sådan der, nu sletter den alle der er 30 dage gamle
Avatar billede jpvj Nybegynder
02. marts 2003 - 23:19 #13
Jeg kender ikke lige mySQL' dato regnefunktioner (eller mangel på samme), men en oplagt mulighed er, at du gemmer tiden i ms siden 1970 (eller hvad der nu er standard int format for dato/klokkeslet i PHP).

Hvis vi antager at du har en tabel "table" med en kolonne "createdate" (tiden i ms ved oprettelsen, dvs. now() ved oprettelsestidspunktet omregnet til ms) og en PHP variabel "timenow" der er now() (altså tiden når scriptet køres) omregnet til ms skriver du følgende for at slette alle indlæg der er mere end 24 timer gamle:

DELETE FROM table WHERE createdate<(timenow-1000*60*60*24)
Avatar billede dumazz Nybegynder
02. marts 2003 - 23:28 #14
ja men hvordan addes dette millisekund tal til MySQL ???
og det der DELETE... skal vel ind i en while et eller andet...

kan i ikke skrive et HELT script der sletter alle poster der er over 24 timer gamle

ligenu har jeg en DATE funktion på dato i min table, så indholdet bliver YYYY-MM-DD, men der må i gerne bruge et med timer osv på.... jeg skal bare ændre det så....
Avatar billede dumazz Nybegynder
02. marts 2003 - 23:29 #15
lillebror> Date(z) øhhh den fik jeg ikke lige fat i
Avatar billede lillebror Nybegynder
02. marts 2003 - 23:37 #16
Når folk opretter et indlæg eller hvad de nu opretter så ryger informationen date(z) ind i et felt. date(z) er lig med 1 den 1/1 den er lig med 32 den 1/2. ergo, den tæller dage.

Jeg håber du er lidt mere med nu, jeg har desværre ikke tid til at hjælpe mere.
Avatar billede olebole Juniormester
03. marts 2003 - 00:01 #17
<ole>

Du har et felt i din tabel, du kan kalde 'stamp'. Når du indsætter data i databasen, skriver du f.eks:

$stamp = time();
$sql = "insert into TABELNAVN (noget, bla, stamp) values ('$noget', '$bla', '$stamp')";
mysql_query( $sql );

Når du så henter data, kan du køre denne først:

$stamp = time();
$timeLim = $stamp - (60*60*24*30);
$sql = "delete from TABELNAVN where stamp<$timeLim";
mysql_query( $sql );

Så er alle indlæg, der er ældre end 30 dage slettet.
/mvh
</bole>
Avatar billede jpvj Nybegynder
03. marts 2003 - 11:39 #18
Nemlig ole! Det er rart at du altid kan følge op min mine indlæg, når jeg nu kaster mig ud i programmeringssprog som jeg ikke har haft fingrene i alt for længe :-)

dumazz> Gør som ole siger, det er et fungerende eksempel af hvad jeg prøvede at vise/forklare.

/JP
Avatar billede olebole Juniormester
03. marts 2003 - 11:45 #19
;o)
Avatar billede dumazz Nybegynder
03. marts 2003 - 16:57 #20
hvorfor virker dette ikke (skal slette ting der ikke er aktuelle):

$dato = now();
mysql_query("delete from ip where dato<'$dato'");
Avatar billede dumazz Nybegynder
03. marts 2003 - 17:05 #21
ja smart.... den kan jo gøres kortere

mysql_query("delete from ip where dato<'now()'");

men virker stadig ikke...
Avatar billede olebole Juniormester
03. marts 2003 - 17:14 #22
Hvis du har prøvet det, jeg skrev vil du se, det virker. Hvorfor lave noget andet, der ikke virker?  :)
Avatar billede dumazz Nybegynder
03. marts 2003 - 17:18 #23
jeg skal ikke bruge time men date... og hvis det hele kan stå på en linie er det meget nemmere at arbejde med...
Avatar billede olebole Juniormester
03. marts 2003 - 17:30 #24
Nej, du skal ikke bruge date ... ikke hvis du vil undgå problemer.
Hvis du bruger date, får du omregnings-problemer og en endnu større kode.
Hvorfor laver du det ikke på den måde, jeg viste dig?
Avatar billede dumazz Nybegynder
03. marts 2003 - 17:40 #25
sådan ???

$nu = time();
$timeLim = $nu - (60*60*24);
$sql = "delete from ip where dato<$timeLim";
mysql_query( $sql );

Skal jeg så bare ændre værdien i MySQL fra DATE til TIME ???
Avatar billede dumazz Nybegynder
03. marts 2003 - 17:43 #26
og i de scripts jeg tilføjede datoen i skal der så stå time() istedet for now() ???
Avatar billede olebole Juniormester
03. marts 2003 - 17:45 #27
Gør, som jeg skrev til dig i (03/03-2003 00:01:04) ... så kan det ikke gå galt
Avatar billede dumazz Nybegynder
03. marts 2003 - 17:49 #28
hvad med denne ?:
Kommentar: dumazz
03/03-2003 17:43:19
Avatar billede dumazz Nybegynder
03. marts 2003 - 17:50 #29
Skal jeg så bare ændre datatypen i MySQL fra DATE til TIME ???
Avatar billede olebole Juniormester
03. marts 2003 - 17:56 #30
Nej, til INT
Avatar billede dumazz Nybegynder
03. marts 2003 - 18:40 #31
olebole> point ?¿?
Avatar billede olebole Juniormester
03. marts 2003 - 18:43 #32
swaaaar  :)
Avatar billede dumazz Nybegynder
03. marts 2003 - 18:46 #33
så takker jeg for denne gang (undskyld jeg er fatsvag)
Avatar billede olebole Juniormester
03. marts 2003 - 18:49 #34
Den slags har det med at fortage sig med øvelsen  ;o)
/mvh
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