09. november 2005 - 16:08
Der er
21 kommentarer og 1 løsning
vise 50 nyeste og slet alle andre udover dem
Hejsa Jeg henter fra min database sådan her: $query = mysql_query("SELECT * FROM noticeboard ORDER BY id DESC LIMIT 50") or die(mysql_error()); Hvordan kan jeg så gøre, så alle dem som ikke er blandt de 50 meste bliver slettet?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
09. november 2005 - 16:15
#1
Så skal du have fat i det id som lige ligger som nummer 51! Og så kan du bruge: DELETE FROM noticeboard WHERE id < DITID
09. november 2005 - 16:19
#2
Jamen, hvordan finder jeg den der er 51. nyeste?
09. november 2005 - 16:20
#3
Det er jo det svære! :o) Du kunne lave SELECT * FROM noticeboard ORDER BY id DESC LIMIT 51 Den sidste eller første række vil indeholde det sidste id, så sletter vi alt som er ældre!
09. november 2005 - 16:26
#4
hmm kan ikke lige se hvordan jeg skal gøre det.. :S..
09. november 2005 - 17:10
#5
DELETE FROM noticeboard WHERE id NOT IN (SELECT id FROM noticeboard ORDER BY id DESC LIMIT 50)
09. november 2005 - 17:11
#6
skal jeg bare gære sådan her så :O mysql_query("DELETE FROM noticeboard WHERE id NOT IN (SELECT id FROM noticeboard ORDER BY id DESC LIMIT 50)") or die(mysql_error());
09. november 2005 - 17:15
#7
Det afhænger af om din MySQL er ny nok til at kunne håndtere subselects, men, ja, ellers burde det virke.
09. november 2005 - 17:48
#8
Lader ikke til at den gør: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
09. november 2005 - 18:03
#9
Hvad kan jeg så gøre?
09. november 2005 - 18:15
#10
Så må du enten gøre som jakobdo foreslår... ...eller du kan gennemføre den indre SELECT: SELECT id FROM noticeboard ORDER BY id DESC LIMIT 50 - hvorved du får en liste af id'er som ikke skal slettes. Denne liste kan du så efterfølgende bruge i en SQL som denne: DELETE FROM noticeboard WHERE id NOT IN (id1,id2,id3,id4, osv., id49,id50)
09. november 2005 - 18:24
#11
JAmen IN er ikke understøttet!
09. november 2005 - 18:31
#12
Prøv lige at lav en sql i din phpmyadmin, som er: SELECT VERSION(); Og skriv hvad du får som output.
09. november 2005 - 18:41
#13
Bare sådan her? VERSION() 4.1.9-max
09. november 2005 - 18:57
#14
Hvad mener du med at IN ikke er understøttet? Det var den specielle måde at bruge LIMIT på at du fik en fejlmedelelse - ikke IN.
09. november 2005 - 20:55
#15
Den skriver jo: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' Men hvordan skal jeg få alle id her ind (id1,id2,id3,id4, osv., id49,id50) ??
09. november 2005 - 21:01
#16
Du kan lave: $query = mysql_query("SELECT id FROM noticeboard ORDER BY id DESC LIMIT 50") or die(mysql_error()); if(mysql_num_rows($query)>0) { $tempArray = array(); while($row = mysql_fetch_assoc($query)) { $tempArray[] = $row["id"]; } $query = mysql_query("DELETE FROM noticeboard WHERE id IN (".implode(",",$tempArray).")") or die(mysql_error()); }
09. november 2005 - 21:03
#17
Nej, fejlbeskeden går udelukkende på at man ikke kan bruge LIMIT i en IN-subselect; Ikke på at man slet ikke kan bruge IN. Denne kode skulle klare jobbet: <? $idArr = array(); $sql = "SELECT id FROM noticeboard ORDER BY id DESC LIMIT 50"; $query = mysql_query($sql) or die(mysql_error()); while ($row = mysql_fetch_assoc($query) { $idArr[] = $row["id"]; } $sql = "DELETE FROM noticeboard WHERE id NOT IN (" . implode(",", $idArr) . ")"; mysql_query($sql) or die(mysql_error()); ?>
21. november 2005 - 18:53
#18
Har du fået kigget på det?
22. november 2005 - 16:00
#19
Nej har ikke haft tid, men smid svar, så må jeg vende tilbage en anden gang hvis det ikke virker.
22. november 2005 - 17:41
#20
Jeg er nu rimeligt sikker på at det virker ... og det burde jo heller ikke tage mange minutter at tjekke efter. Du vender selvfølgeligt bare tilbage hvis der er mere ... og et svar ind til da :^)
11. december 2005 - 20:23
#21
Husk nu at acceptere svaret :^) Har du i øvrigt fået det til at virke 100%
14. december 2005 - 16:48
#22
Det blev ikke så nædvendigt igen, da min ven bare valgte at tømme databasen hver dag.
Vi tilbyder markedets bedste kurser inden for webudvikling