Avatar billede total_sejt Nybegynder
03. november 2003 - 18:41 Der 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 

På forhånd mange tak for jeres hjælp!
Avatar billede rackbox Nybegynder
03. november 2003 - 21:37 #1
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
Avatar billede rackbox Nybegynder
03. november 2003 - 21:38 #2
Ups.. Det skulle være et svar ;-) Her er lige en post, så du evt. kan acceptere svaret ;-)
Avatar billede rackbox Nybegynder
03. november 2003 - 22:14 #3
Damn.. Den markerer ikke som "svar".. Prøver igen ;-)
Avatar billede total_sejt Nybegynder
05. november 2003 - 13:42 #4
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.
Avatar billede rackbox Nybegynder
05. november 2003 - 14:58 #5
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(*)'];

Bare skriv.

Rackbox
Avatar billede rackbox Nybegynder
05. november 2003 - 15:04 #6
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);

Good luck!
Avatar billede total_sejt Nybegynder
09. november 2003 - 13:50 #7
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
Avatar billede rackbox Nybegynder
09. november 2003 - 19:09 #8
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!
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