An wievielter Stelle bei einer Auflistung.

Essbaumer

Grünschnabel
Hallo,

ich habe ein kleines Problem.
Ich habe eine Auflistung von Benutzer.
In der Tabelle "user" stehen jede Menge User. Diese möchte ich per "order by" sortieren.
Nun möchte ich wissen, an wievielten Platz ein bestimmter Benutzer steht.

Beispiel:
$sql = "select * from user order by start_date";
$x = mysql_query($sql);

Es gibt die Spalte "id". Durchnummeriert. Jeder Benutzer hat eine eindeutige ID.
Ziel ist es nun, beispielsweise von der ID 17 herauszufinden, an welche Position er in der Nummerierung steht.

Ich würde das als Schleife machen:
for($y=0;$y < $num; $y++)
{
$user_id = mysql_result($x, $y, "id");
if ( $user_id == 17 )
{
echo $y;
}
}

Gibt es da was besseres?
 
start_date ist das Datum der Registrierung des Users? Erste Frage, ist die Unique ID möglicherweise schon ausreichend? Sicherlich nicht, weil gelöschte User eben jene gleichermaßen hochgesetzte haben.. Wie dem auch sei. Man könnte ein Subselect mit einem Zähler machen, der nach start_date gesetzt wird.

Erstmal brauchen wir ein Select, wo ein Autoincrement mit einer neuen "synthetischen" Spalte erstellt wird. (sogar da benutzen wird schon ein subselect)
Code:
SELECT  @n:=@n+1 new_id,* FROM user, (SELECT @n:= 0) AS n ORDER BY start_date
Dieses Ergebnis wäre die Ausgangsbasis für das Select, wo wir nach dem eigentlichen User suchen.
Code:
SELECT * FROM (SELECT  @n:=@n+1 new_id,* FROM user, (SELECT @n:= 0) AS n ORDER BY start_date) WHERE user_id=17
In der Spalte new_id müsste jetzt der gewünschte Wert stehen. Ich hab das jetzt rein theoretisch hingekliert, sprich, Ausprobieren, Nachbessern müsstest Du.

(oOps, im Moment denke ich sogar, andersrum wäre besser. Erst ORDER_BY-Subselect, danach den Autoincrement erstellen und nach user_id filtern)

mfg chmee
 
Zurück