# bestimmte Zeile in mySQL Abfrage



## TS-JC (20. Juli 2005)

Alöso ich möchte per PHP z.B. eine bestimmte Zeile in einer mySQL Abfrage ansteuern.

Ich rufe also erstmal die Daten ab
$result = MYSQL_QUERY ("SELECT * FROM s6_user ORDER BY punkte DESC");
Und nun möchte ich z.B. in Zeile 30 springen.
Oder ich möchte wissen in welcher Zeile ein bestimmter Wert auftaucht.

Bisher hab ich dies umständlich mit einer for-Schleife gemacht, aber das geht bestimmt auch einfach, nur habe ich noch keinen Befehl dazu gefunden.

thx4help


----------



## Sebigf (20. Juli 2005)

Hallöchen...

Also Springen würde ich mit WHERE (gesuchtespalte = 'wert')
und später noch ein LIMIT 1 dranhängen 

Dann einfach die gewünschte Spalte auslesen lassen und gut.

Ich hoffe ich konnte die evtl. helfen. Hoffe ich habe dich richtig verstanden


----------



## TS-JC (20. Juli 2005)

nein ich möchte mit dieser SQL Abfrage nach Punkten ordnen, wie du oben ja siehst
und dann wissen, an welcher Stelle z.B. user1 steht
So müsste ich Zeile für Zeile abfragen bis ich ihn finde und dabei nen Zähler laufen lassen, den ich dann ablesen kann

das Andere ist das ich nach einer Abfrage gleich zur Stelle 30 springen will
das müsste doch mit LIMIT irgendwie gehen oder?


----------



## hpvw (20. Juli 2005)

```
SELECT * FROM s6_user ORDER BY punkte DESC LIMIT 30,1
```


----------



## TS-JC (21. Juli 2005)

jo thx hat geklappt
dumm das ich nicht selbst drauf gekommen bin

meine andere frage in welcher zeile ich einen bestimmten wert finde ist aber noch nicht geklärt
hat jemand hierzu ne idee?


----------



## WieGehts (22. Juli 2005)

Hallo,
Möglichkeit 1:
in MSSQL könnte die folgende Abfrage zum gewünschten Ergebnis führen (die Syntax ist ev. nicht ganz korrekt):
SELECT COUNT(*) AS platz FROM s6_user WHERE punkte >= (SELECT punkte FROM s6_user WHERE user = user1)
Das Ergebnis würde dabei als platz ausgegeben, user1 ist der gesuchte User. 
Diese Abfrage geht davon aus, dass eine hohe Punktezahl einen besseren Platz bedeutet. Sollte eine bessere Platzierung mit weniger Punkten belegt werden, musst du anstelle >= auf <= abfragen.
Wenn mehrere User die gleiche Punkteanzahl haben können, wird es schwierig. In diesem Fall musst du in einer 2. Abfrage (SELECT COUNT(*) AS gleich FROM s6_user WHERE Punkte = (SELECT punkte FROM s6_user WHERE user = user1)) feststellen wie viele user die gleiche Punkteanzahl haben und die dann von platz subtrahieren (platz – gleich + 1). 

Möglichkeit 2:
Wenn mehrere User die gleiche Punktezahl haben können, ist ev. dieser Vorschlag besser:
SELECT COUNT(*) AS platz FROM s6_user WHERE punkte > (SELECT punkte FROM s6_user WHERE user = user1)
Diese Abfrage liefert immer einen um 1 kleineren Wert als dem Platz entspricht, daher zu platz noch 1 addieren. Vielleicht geht sogar SELECT (COUNT(*) + 1) AS … Bitte ausprobieren!


----------

