Zitat Zitat von DFYX
Hm, nich so ganz was ich will. Ich will ja nicht das hundertste bewertete löschen, sondern das schlechteste bewertete. Also mal zwei Beispielszenarien:
Habe ich schon verstanden und dafür ist das kleine Schnippselchen auch da. Habe jetzt mehr Zeit, also ausführlich.
Zitat Zitat
Der Anfang wäre DELETE FROM charts WHERE votes>0 ORDER BY pointspervote ASC LIMIT 1 und da muss jetzt noch die Abfrage rein, ob die Tabelle 100 Datensätze enthält oder nicht.
OK, wenn das so aufgebaut ist, würde eine so weit ich erkennen kann passende Query so aussehen (ID ist der Primärschlüssel, weiß ja nicht, wie der bei dir heißt):

DELETE FROM charts WHERE votes>0 HAVING ID NOT IN (SELECT ID FROM charts ORDER BY pointspervote DESC LIMIT 100) ORDER BY pointspervote ASC LIMIT 1

Eigentlich könntest du dann sogar alles hinter meinem Eingefügten weglassen ("ORDER BY pointspervote ASC LIMIT 1"), dann würden alle gelöscht werden, die über das hundertste hinausgehen, also wenn wegen irgendwas einmal 105 drin wären würden gleich die schlechtesten 5 gelöscht.

Funktion: Meine Unterabfrage gibt die hundert besten aus, dann wird bei allen zu löschenden überprüft, ob sie darin enthalten sind. Sprich: die hundert besten bleiben drin, alle anderen (bzw mit deinem "Limit 1" eben nur das allerschlechteste) werden gelöscht. Falls weniger als hundert in der Tabelle drin sind, dann wird nichts gelöscht.

Gäbe sicher noch eine elegantere Lösung mit IF-Statement, aber das ist in SQL so merkwürdig, ich weiß auf jeden Fall nicht, wie's ginge, und das müsste auch funktionieren.
Ich hoffe, das tut es auch. ^^'