Avatar billede human Nybegynder
31. august 2004 - 16:14 Der er 10 kommentarer og
1 løsning

Slet hvis mere end 30 posts

Yes.. har en lille tagwall.. men kommer der mere end 30 post i den, skal de ældste slettes. Så gemmer selvfølgelig tiden på dem.

Men hvordan gøres det smartest? Har overvejet en fx COUNT(*), men ved ikke om det er det smarteste?

Ser meget gerne et eksempel..
Avatar billede chries Nybegynder
31. august 2004 - 16:18 #1
hvor count = antal der er for mange
DELETE FROM somelog ORDER BY timestamp ASC LIMIT $count
Avatar billede human Nybegynder
31. august 2004 - 16:21 #2
Er det virkelig den smarteste måde? Tænker på performence..
Avatar billede chries Nybegynder
31. august 2004 - 16:36 #3
hvis du har et id felt og ikke har huller i den (de er fornumerede 1..2..3..4..)

http://www.eksperten.dk/spm/534268

$maxid = mysql_insert_id();
mysql_query("DELETE FROM tabel WHERE id < ($maxid-100)") or die(mysql_error());
Avatar billede chries Nybegynder
31. august 2004 - 16:37 #4
Du har en insert et sted.. efter denne skriver du:

$maxid = mysql_insert_id();
mysql_query("DELETE FROM tabel WHERE id < ($maxid-100)") or die(mysql_error());
Avatar billede human Nybegynder
31. august 2004 - 16:43 #5
Det med id vil jo ikke virke, for selvom tabbelen bliver helt tømt, vil den ikke starte fra 1 igen.. Bruger den første.
Avatar billede krydset Nybegynder
31. august 2004 - 17:54 #6
Hvorfor vil du egentlig slette de amle er det ikke bare bedre kun at vise de sidste 30(nyeste)
Avatar billede human Nybegynder
31. august 2004 - 18:40 #7
Fordi der bliver ca. postet 4000 indlæg om dagen.. Og det er ikke noget vigtig der står der..

Bare som en tavle hvor man må skrive alt, såsom bøh!
Derfor :)

Og fordi jeg ikke har råd til så meget mysql plads...
Avatar billede human Nybegynder
31. august 2004 - 19:36 #8
jeg bruger dette:

$slet_query = mysql_query ("SELECT count(10) as count FROM du_tagwall");
$slet_row = mysql_fetch_array($slet_query) or die(mysql_error());

$count = $slet_row['count'];

$sletj_query = mysql_query("DELETE FROM du_tagwall ORDER BY tid ASC LIMIT $count") or die(mysql_error());

Det er meningen med det, at hvis der er mere end 10 poster skal den slette de ældste. Igennem feltet tid. Men den sletter dem alle.
HVad gør jeg forkert?
Avatar billede chries Nybegynder
01. september 2004 - 09:27 #9
$slet_query = mysql_query ("SELECT count(*) as no FROM du_tagwall");
$slet_row = mysql_fetch_array($slet_query) or die(mysql_error());

$count = $slet_row['no'];

if( $count > 30 ) {
  $count = $count - 30;
  $sletj_query = mysql_query("DELETE FROM du_tagwall ORDER BY tid ASC LIMIT $count") or die(mysql_error());
}

du skal nok låse tabellen før count til efter slet, ellers risikere du at to bruger simultant sletter formange.
Avatar billede human Nybegynder
01. september 2004 - 15:25 #10
chries: Nope den sletter ikke hvis der er mere end 30.. Den udskriver i hvert fald 35
Avatar billede human Nybegynder
02. september 2004 - 13:50 #11
Lukket
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