DELETE MIN(Value)

DELETE MIN(Value)

am 20.11.2004 11:41:14 von Eckhard Schmitting

Hallo, ich möchte für eine Highscore Liste die auf 100 Einträge begrenzt
sein soll jeweils die Zeile mit dem geringsten Punktewert
aktualisieren.

UPDATE highscores SET punkte='$_POST[punkte]' WHERE MIN( punkte ) LIMIT 1
Fehlermeldung: invalid use of Group function. Ich verstehe nicht was das
Theater soll,
SELECT MIN(punkte) FROM highscores funktioniert schliesslich auch. Aber was
auch immer... Wie kriege ich es hin ?

Re: DELETE MIN(Value)

am 20.11.2004 14:11:57 von Michael Rittweger

Hallo, Eckhard!

> UPDATE highscores SET punkte='$_POST[punkte]'
> WHERE MIN( punkte ) LIMIT 1

Und womit soll das min(punkte) dann verglichen werden, um danach zu filtern?
Versuch mal

SELECT * FROM highscores WHERE 1;

Das liefert Dir _alle_ Datensätze, weil 1=true, Bedingung erfüllt, Datensatz
gültig.

Entsprechend würde

UPDATE highscores SET punkte=$wert WHERE 1;

auch _alle_ Datensätze mit der neuen Punktezahl setzen! Ein 'LIMIT 1' würde
nur dafür sorgen, daß ein zufälliger herausgepickt wird, eben der, der
gerade als erstes vom Server in die Ergebnismenge gepackt worden ist.

> SELECT MIN(punkte) FROM highscores funktioniert schliesslich auch.

Hm, ja, aber was gibt das als Ergebnis zurück? Einen Datensatz? Eher nicht,
oder? Das liefert Dir nur die Punktezahl zurück, aber ohne die Information,
zu welchem Datensatz diese Punkte gehören.

Ich würd eher was in die Richtung versuchen:

1) SELECT * FROM highscores ORDER BY punkte ASC LIMIT 1;

(ASC ist, glaube ich, Default.)

Das sollte Dir den Datensatz mit der geringsten Punktezahl geben. In der
Hoffnung, daß Deine Tabelle auch einen PrimaryKey hat, ist ein
entsprechendes UPDATE dann auch simpel:

2) UPDATE highscores SET punkte=$wert WHERE primaerindex=$primaryselect;

Mag sein, daß man das auch irgendwie in einer Abfrage zusammen erledigen
kann. Ich wüßte jetzt bloß nicht wie. Und wenn's geht, würd's mir wohl auch
zu unübersichtlich werden.

Gruß, Michael

Re: DELETE MIN(Value)

am 22.11.2004 15:50:30 von Muhammed Yazici

Hallo,


"Eckhard Schmitting" schrieb im Newsbeitrag
news:cnn6vd$hq$04$1@news.t-online.com...
> Hallo, ich möchte für eine Highscore Liste die auf 100 Einträge begrenzt
> sein soll jeweils die Zeile mit dem geringsten Punktewert
> aktualisieren.
>
> UPDATE highscores SET punkte='$_POST[punkte]' WHERE MIN( punkte ) LIMIT 1
> Fehlermeldung: invalid use of Group function. Ich verstehe nicht was das
> Theater soll,
> SELECT MIN(punkte) FROM highscores funktioniert schliesslich auch. Aber
was
> auch immer... Wie kriege ich es hin ?
>
>

Update highscores set punkte='$_POST[punkte]' where punkte in (select
min(punkte) from highscores)

Ich glaube so müsste es gehen ...

LG

Muhammed Yazici