03. november 2003 - 18:41Der er
7 kommentarer og 1 løsning
Slet gamle tråde
Jeg har et forum hvor der bliver oprettet man ge tråde og det fylder databasen. Er der mulighed for at man sletter de tråde som der ikke er blevet skrevet i inden for de 10 seneste dage?
forum_body: (trådene bliver lagt her) sid | overskrift | navn | email | dato | besked | replies
forum_msg: (Her bliver indlæggene til trådene lagt) sid | navn | email | dato | besked | replyto
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Jeg antager, at det er PHP & MySQL du kører med, samt at "dato" feltet er af typen "DATE". Jeg kan ikke helt forstå din måde at lave databasen på, idet jeg ikke kan se relationen mellem de to tabeller. Hvad betyder eks. "replies"?
Nåmen.. Du kan bruge følgende fremgangsmåde - eller tilpasse den, så det passer til din database, som jeg ikke kan gennemskue:
//Først finder vi timestamp for ti dage siden $dato_10dage_siden= strtotime ("-10 days"); //Dernæst konverteres det til MySQL format (YYYY-MM-DD) $dato_mySQL=date('Y-m-d',$dato_10dage_siden); //Her er din query, som sletter alt før denne dato $query = "delete from forum_body where dato <=".$dato_mySQL; mysql_query($query);
Og tilsvarende for den anden tabel. Hvis du vil have et bedre bud, så forklar lige relationen mellem tabellerne. God vind rackbox
Jeg er i øjeblikket ikke 110% sikker på hvordan jeg skal bruge det du har posted, men forsøger lige.
Jeg kan lige prøve at forklare hvordan min database er. I forum_body bliver selve trådene lagt. Altså overskriften og selve beskeden. replies er hvor mange svar der har været til tråden. Hver gang der bliver lagt et indlæg i tråden skriver den + en i replies. Selve replies'ne bliver lagt i forum_msg.
Det var da en uhyggelig måde at opbygge det på... Her er mit forslag: Skrot dit eget design og lav følgende to tabeller i stedet:
forum_body: (trådene bliver lagt her) sid | overskrift | navn | email | dato | besked
forum_msg: (Her bliver indlæggene til trådene lagt) sid | navn | email | dato | besked | body_id
Jeg har smidt følgende væk: replies og replyto. Sidstnævnte antager jeg at du bruger til at relatere til forum_body, så du kan se hvor replies hører hjemme. Jeg har så kaldt den body_id i stedet for. Der er ingen grund til at have et "replies" felt, da du bare kan få MySQL til at tælle antallet for dig ;-)
Koden er så her for at slette alle beskeder, som er ældre end 10 dage.
//Først finder vi timestamp for ti dage siden $dato_10dage_siden= strtotime ("-10 days"); //Dernæst konverteres det til MySQL format (YYYY-MM-DD) $dato_mySQL=date('Y-m-d',$dato_10dage_siden); //Her er din query, som sletter alt før denne dato $query = "delete from forum_body where dato <=".$dato_mySQL; mysql_query($query);´ $query = "delete from forum_msg where dato <=".$dato_mySQL; mysql_query($query);
Håber så at det kan bruges...
Når du skal tælle antallet af replies, bruger du følgende query: $query = "select count(*) from forum_msg where body_id = ".$body_id; $result = mysql_query($query); $row = mysql_fetch_array($result); $replies = $row['count(*)'];
Jeg antager, at replies altid er nyere end body. Men jeg har ikke taget højde for, at der kan ligge replies til en body, der faktisk er slettet, men efter 10 dage er der atter ryddet op. Det har ikke den store betydning, at der ligger data, som ikke bliver brugt, blot det ikke eskalerer. Hvis du alligevel synes at det er noget rod, så er følgende fremgangsmåde naturligvis brugbar:
$query = "select * from forum_body where dato <=".$dato_mySQL; $result = mysql_query($query); while ($row = mysql_fetch_array($result)){ mysql_query("delete from forum_msg where body_id=".$row['sid']); } mysql_query("delete from forum_body where dato <=".$dato_mySQL);
Hej... Jeg valgte en, måske meget dårlig løsning, men den virker! Hver gang man poster noget kommer det ind i databasen med strtotime("-0 days") Og så tjekker den bare med strtotime("-10 days") og sletter det der er 10 eller flere dage gammelt. Kan du ikke lige sige om løsningen virker... Så vidt jeg kan se gør den, men måske er det bare skindet der bedrager (eller hva man nu siger :D
Ja, umiddelbart vil det fungere.. Den sletter i så fald blot de gamle posts, når der postes nye, men det er vel OK.. Der er to måder at tjekke om det virker på: Prøv det eller post den relevante del af koden... Men til lykke med din løsning!
Synes godt om
Ny brugerNybegynder
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.