MySQL-> Einträge löschen

Übersicht Ressourcen Andere Programme oder Tools

Neue Antwort erstellen

Firstdeathmaker

Betreff: MySQL-> Einträge löschen

BeitragMi, Sep 05, 2007 9:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich versuche gerade selber einen onlinehighscore zusammen zu basteln, bin auch schon fast fertig, nur will mir das löschen von zu vielen Einträgen noch nicht gelingen.
Ich möchte immer nur die 10 besten behalten und alle anderen darunter löschen.
In meinem Script steht also:


Code: [AUSKLAPPEN]
$loeschen = "DELETE FROM highscore ORDER BY points LIMIT 10,0";
$ergebnis = mysql_query($loeschen);


Es wird kein Fehler ausgegeben, aber es wird auch nix gelöscht. Was mache ich also falsch?

Ich hab es auch schon mal hiermit versucht, aber das geht auch nicht:
Code: [AUSKLAPPEN]
$abfrage = "SELECT * FROM highscore ORDER BY points DESC LIMIT 10,0";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
   {
   $id = $row->id;

   $loeschen = "DELETE FROM highscore Where id = $id";
   $loesch = mysql_query($loeschen);

   }


Kann mir jemand sagen was ich falsch mache?
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Silver_Knee

BeitragMi, Sep 05, 2007 10:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würd einfach alles nach punkten sortiert selecten, in die schleife einen counter setzten und wenn der über 10 geht den aktuellen eintrag löschen:
Code: [AUSKLAPPEN]
$abfrage = "SELECT * FROM `highscore` ORDER BY `points`";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)){
   $id = $row['id'];

   $loeschen = "DELETE FROM `highscore` WHERE `id` =  '$id' ";
   $loesch = mysql_query($loeschen);
}


so dürfte es gehen.
ich hab mal anführungsstriche an alles gesetzt.

Pdd

Betreff: Re: MySQL-> Einträge löschen

BeitragMi, Sep 05, 2007 11:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Firstdeathmaker hat Folgendes geschrieben:
Hi,
Code: [AUSKLAPPEN]
$loeschen = "DELETE FROM highscore ORDER BY points LIMIT 10,0";
$ergebnis = mysql_query($loeschen);



Ich bin in MySQL auch nicht so fit, aber meines Wissens müsste es so heißen:
Code: [AUSKLAPPEN]

$loeschen = "DELETE FROM `highscore` ORDER BY `points` DESC LIMIT 10,0;";
$ergebnis = mysql_query($loeschen);

- (Bei den Namen der Tabellen auf Groß/Klein-Schreibung achten!)
- Ausserdem weiß ich nicht, was das ",0" bei Limit zu suchen hat.
- Du hast das abschließende ";" in der Query vergessen!

Wenn das nicht funktioniert, versuche noch ein "WHERE 1 = 1" mit einzubringen.

Viel Glück! Wink
Lieber Apfel als Birne.

Firstdeathmaker

BeitragMi, Sep 05, 2007 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: @ Pd: Wo hab ich da das Semikolon bei Querry vergessen? In deinem Zitat meines Posts und in meinem Post ist es enthalten...
Funktioniert aber leider so immer nocht nicht.

@Silver_Knee:
Meinst du so?

Code: [AUSKLAPPEN]
$abfrage = "SELECT * FROM `highscore` ORDER BY `points`";
$ergebnis = mysql_query($abfrage);
$counter = 0;
while($row = mysql_fetch_object($ergebnis)){
   $counter++;
   if ($counter>10){
      $id = $row['id'];
      $loeschen = "DELETE FROM `highscore` WHERE `id` =  '$id' ";
      $loesch = mysql_query($loeschen);
   }
}


Da meckert der aber wegen der Zeile
Code: [AUSKLAPPEN]
$id = $row['id'];

und sacht
Zitat:
Cannot use object of type stdClass as array



Ich hab jetzt noch was anderes probiert, aber das funktioniert auch nicht:
Code: [AUSKLAPPEN]
$abfrage = "DELETE FROM highscore WHERE id NOT IN (select id from highscore ORDER BY points LIMIT 10)";
$ergebnis = mysql_query($abfrage);
echo "Gelöscht: $ergebnis";
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

D2006

Administrator

BeitragMi, Sep 05, 2007 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
$loeschen = "DELETE FROM highscore ORDER BY points LIMIT 10";


"LIMIT 10,0" heißt er soll die ersten 10 überspringen und dann 0 löschen. Wenn du nur einen Parameter angibst, dann heißt das er soll die ersten 10 löschen.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Silver_Knee

BeitragMi, Sep 05, 2007 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
@my code

Code: [AUSKLAPPEN]
mysql_fetch_object($ergebnis)

ahaaa
ich nutze immer
Code: [AUSKLAPPEN]
mysql_fetch_array($ergebnis)

woraufhin meine schreibweise mit dem $row['id'] benutzbar wird

also entweder:
Code: [AUSKLAPPEN]
$abfrage = "SELECT * FROM `highscore` ORDER BY `points`";
$ergebnis = mysql_query($abfrage);
$counter = 0;
while($row = mysql_fetch_array($ergebnis)){
   $counter++;
   if ($counter>10){
      $id = $row['id'];
      $loeschen = "DELETE FROM `highscore` WHERE `id` =  '$id' ";
      $loesch = mysql_query($loeschen);
   }
}

oder
Code: [AUSKLAPPEN]
$abfrage = "SELECT * FROM `highscore` ORDER BY `points`";
$ergebnis = mysql_query($abfrage);
$counter = 0;
while($row = mysql_fetch_object($ergebnis)){
   $counter++;
   if ($counter>10){
      $id = $row->id;
      $loeschen = "DELETE FROM `highscore` WHERE `id` =  '$id' ";
      $loesch = mysql_query($loeschen);
   }
}

Firstdeathmaker

BeitragMi, Sep 05, 2007 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann müsste das hier aber funktionieren (tut es aber nicht):

Code: [AUSKLAPPEN]
$anfrage = "DELETE FROM `highscore` ORDER BY `points` DESC LIMIT 10,9999;";
$ergebnis = mysql_query($anfrage);


Edit: Aha, @Silver_Knee: Jetzt funktionierts.
Ich glaube mein Fehler war auch, das man LIMIT bei DELETE nicht mit 2 Parametern einsetzen kann, sondern nur mit einem. Dankeschön!
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Justus

BeitragMi, Sep 05, 2007 13:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Entschuldige, wenn es nicht ganz ontopic ist:

Ich würde dir davon abraten, nur 10 Scores in der Datenbank zu behalten. Niemand weiß, ob du irgendwann nicht nochmal eine längere Liste brauchst und sei es nur interessehalber.

Eine MySQL-Datenbank verbraucht lächerlich wenig Speicherplatz, ich würde dir empfehlen, zwischen 500 und 1000 Beiträgen zu speichern; wie viele du davon ausgibst, ist natürlich eine andere Frage.

Farbfinsternis

BeitragMi, Sep 05, 2007 13:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Justus hat recht, gucke Dir mal den Source an den ich in Deinen Thread gepostet habe. Dieser erlaubt es Dir nur die besten zehn anzuzeigen.

Code: [AUSKLAPPEN]

highscore.GetScores(0, 10)
Farbfinsternis.tv

Pdd

BeitragDo, Sep 06, 2007 9:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Firstdeathmaker hat Folgendes geschrieben:
Edit: @ Pd: Wo hab ich da das Semikolon bei Querry vergessen? In deinem Zitat meines Posts und in meinem Post ist es enthalten...
Funktioniert aber leider so immer nocht nicht.


Nein, ich meinte das Semilikon innerhalb der Query. Das hast du vergessen und ich habe es eingefügt Wink Aber wie es aussieht funktioniert ja alles schon. Also weiterhin viel Spaß dabei Wink
Lieber Apfel als Birne.

Neue Antwort erstellen


Übersicht Ressourcen Andere Programme oder Tools

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group