Habe ich schon verstanden und dafür ist das kleine Schnippselchen auch da. Habe jetzt mehr Zeit, also ausführlich.Zitat von DFYX
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):Zitat
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. ^^'






Zitieren