Wenn man mit PHP eine Laufvariable bauen will, dann weiß jeder sofort wie das geht. Nehmen wir beispielsweise mal eine Ranking, das die Punkte und den aktuellen Rang einer Benutzertabelle ausgeben soll. Das Skript würde dann so ähnlich aussehen:
$position = 1; $result = mysql_query("SELECT benutzername, punkte FROM benutzer ORDER BY punkte DESC"); while($row = mysql_fetch_assoc($result)) { echo "{$row['benutzername']} - {$row['punkte']} Punkte, Rang {$position}<br>"; $position++; } |
Aber wie löst man sowas, wenn man nur MySQL zur Verfügung hat?
Im Grunde funktioniert das genau wie in PHP, nur die Syntax ist ein wenig anders. Es wird genau wie in PHP eine neue Variable deklariert und diese beim jeden ausgelesenen Datensatz hochgezählt.
Das geänderte SQL-Query sieht dann so aus:
SET @position = 0; SELECT @position := @position + 1 AS position, benutzername, punkte FROM benutzer ORDER BY punkte DESC; |
In der ersten Zeile wird die Variable @position definiert und innerhalb des SELECT-Aufrufs wird die Variable dann jeweils um eins erhöht und der neue Wert zwischengespeichert.
So lässt sich zum Beispiel das aktuelle Ranking der Benutzertabelle direkt über MySQL in eine zweite Tabelle abspeichern, ohne jeden Datensatz einzeln mit PHP auslesen und wieder neu einfügen zu müssen:
SET @position = 0; INSERT INTO benutzer_ranking (position, benutzername, punkte) SELECT @position := @position + 1 AS position, benutzername, punkte FROM benutzer ORDER BY punkte DESC; |
Mir fällt gerade auf, dass dies hier der 50. Artikel auf meinem Blog ist – ein Jubiläum 🙂
Dann muss ich mir für den nächsten Artikel etwas besonderes einfallen lassen.