bestimmte mysql datensätze löschen

saua

Grünschnabel
Hallo!
So ich hab da ein Problem...Ich möchte mit PHP, MySQL Datensätze löschen.

hier mal ein bild:
http://saua.cybton.com/blA/mysql_datenbank.png

Hier sollen alle Reihen unterhalb der 4ten von unten gelöscht werden! Also praktisch alles was nach dem 20ten Eintrag kommt.
Nur wie stell ich des an? Hab schon bei google und in Foren gesucht aber nichts passendes gefunden.
 
Gibt es eine Bedingung nach der geloescht werden soll?
Z.B. dass nur 20 Eintrage in der DB sein sollen? Und wenn ja, was ist der Grund?
 
Ja es gibt einen Grund dafür. Das auf dem Bild ist die Tabelle einer Highscoreliste.
Es werden aber nur die besten 20 ausgegeben. So wenn aber 100 Leute sich eintragen dann sind 80 Einträge eigentlich sinnlos. Deshalb wollt ich irgendwie nen Skript basteln der mir alle Datensätze nach dem 20ten löscht. Hab ich aber irgendwie nicht hinbekommen.
 
Das Problem dabei wird wohl sein, dass Du erstmal feststellen musst wer denn die Top 20 sind, denn die willst Du ja nicht loeschen. Und die werden ja wohl nicht in der Tabelle ganz oben stehen. Ausser halt bei einem SELECT * FROM highscore ORDER BY score
Jedoch ist das ja bei einem DELETE nicht der Fall, daher werden die wohl mitten drin stehen.
Am besten wird sein Du holst Dir alle Eintrage, sortiert nach Score.
Dann faengst Du beim 21. Eintrag an und loeschst jeweils anhand der ID.
 
Danke schon mal!
Ja ok aber muss ich dann wieder alle per Hand löschen? Weil so dringend ist es ja auch nicht. Ich kann ja genauso gut im phpmyadmin des machen aber ich wollte gerne nen PHP skript der das automatisch für mich macht.
Ich kann ja PHP auch nicht wirklich gut.
 
Nee, Du musst die nicht von Hand loeschen. Das Script muss halt nur erstmal gucken was geloescht werden kann.
Beispiel:
PHP:
$results=mysql_query("select * from highscores order by score");
$counter=0;
unset($id);
while ($result=mysql_fetch_assoc($results))
 {
  $id[$counter]=$result;
  $counter++;
 }
for ($x=20;$x<$counter;$x++)
 {
  mysql_query("delete from highscores where id='$id[$x]'");
 }

Alternativ kannst Du auch den Score des 20. in der Liste auslesen und alles mit kleinerem Score loeschen. Sollte auch gehen.
 
Alternativ kannst Du auch den Score des 20. in der Liste auslesen und alles mit kleinerem Score loeschen. Sollte auch gehen.

Das hab ich mir auch schon überlegt.

Hmm jetzt wollt ich grad deinen code ausprobiern und dann:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\apachefriends\xampp\htdocs\BuK spiele skript\cybton\acp (spiele)\bla.php on line 12


Und wie mach ich dass ich nur die Punktezahl des 20ten Datensatzes bekomm?
Weil der Alternative Lösungsweg ist mir doch irgendwie lieber.
 
Hast Du das Script 1:1 uebernommen oder an Deine Umgebung angepasst?
Hab z.B. jetzt grad gesehen, dass Du anstatt Score Punkte in der DB stehen hast.
Ausserdem weiss ich ja nicht wie Deine Tabelle heisst.
 
Angepasst hab ich es schon, es sei denn.....Naja ich poste mal den ganzen code:


PHP:
<?php
$dbspiel = $_GET["spiel"];
require("config.inc.php");

$db = mysql_connect($dbserver,$nutzer,$passwort);

$tabelle = "highscore_$dbspiel";

$results=mysql_query("select * from $tabelle order by punkte DESC, datum");
$counter=0;
unset($id);
while ($result=mysql_fetch_assoc($results))
{
  $id[$counter]=$result;
  $counter++;
}
for ($x=20;$x<$counter;$x++)
{
  mysql_query("delete from highscores where id='$id[$x]'");
} 
?>
 
Zurück