mySQL - delete

Tags:    php

Jeg søger en mySQL foresp. som sletter alle rækker i en tabel, undtaget de 50 nyeste (sorteret efter dato)... Hvordan gøres dette?

Mvh Dennis Madsen
http://www.demaweb.dk



5 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Jeg har 29 rækker i tabellen, men ikke engang denne får slettet nogle af dem:

mysql_query("DELETE FROM chat ORDER BY dato DESC LIMIT 5, 50");

Jeg tror ikke man kan bruge LIMIT i en delete!?


Fold kodeboks ind/udKode 


Dette er taget direkte fra MySQL online dokumentationen.

Man kan dog desværre ikke anvende LIMIT på samme måde som man kan ved et SELECT, idet LIMIT kun accepterer et eneste argument... antallet af rækker der skal slettes. Man kan altså ikke anvende noget offset... SORRY

Det er altså ikke muligt, at gøre dette i et SQL udtryk i MySQL, men det er der også så meget andet smart som ikke er... du bliver nødt til at gøre det over flere queries, eks.

$r = mysql_query("SELECT * FROM chat");
$num = mysql_num_rows($r);

$r = mysql_query("DELETE FROM chat ORDER BY dato LIMIT " + ($num-5));





Tror du kan gøre det sådan her, meeen er ikke sikker:
mysql_query("DELETE FROM tabel ORDER BY felt LIMIT 50,");

Grunden til , 50 er at LIMIT start, antal. Det kan være, at du bliver nødt til at gøre følgende:
mysql_query("DELETE FROM tabel ORDER BY felt LIMIT 50, 999999999999");

mikl-dk | ICQ: 159096501 | MSN: mikl@mikl.dk



Jeg har 29 rækker i tabellen, men ikke engang denne får slettet nogle af dem:

mysql_query("DELETE FROM chat ORDER BY dato DESC LIMIT 5, 50");

Jeg tror ikke man kan bruge LIMIT i en delete!?



det kan godt ske at det er mig der er totalt dum, men du har 29 rækker og du vil slette alle på nær de 50 nyeste ????
- SpeC - #SpeC.DK @ Q-NET



Ja, ved godt det var det første jeg sagde..

Men så lavede jeg lige om på forespørgelsen:

mysql_query("DELETE FROM chat ORDER BY dato DESC LIMIT 5, 50");

Det den gerne skulle, var at den skal slette alle rækker pånær de frem første!
Den skulle altså slette fra 5-50 (og da jeg kun har 29 er det altså alle på nær de 5 første)!

Hvordan kan jeg gøre det?



t