"Platzierung" nach Punkten anzeigen [MYSQL]
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
aufbau
ausgeben
benutzer
benutzername
code
datenbank
datensatz
datum
eigener name
ergebnis
folgende abfrage
optimieren
ordern
platz
punkt
rang
spalten
url
zeile
-
Hallo LC,
ich möchte meinen Usern anzeigen welchen Platz sie mit ihren Punkten erreicht haben.
Bisher lese ich nach Punkten Sortiert alle einträge der DB aus und wenn der Name mit dem User Namen übereinstimmt
geb ich den Platz aus.´
$abfrage = "SELECT * FROM PunkteDB .... ORDER BY PunkteDESC"; $ergebnis = mysql_query($abfrage); if (mysql_num_rows($ergebnis) > 0) { while($row = mysql_fetch_object($ergebnis)) { $name = htmlspecialchars(mysql_escape_string($row->name)); if($name == "$nick"){ // DB Name == Eigener Name echo"<b>Platz $i</b>"; break; } $i++; } }
Da ich aber Grade dabei bin meine Scripte zu optimieren wollte ich fragen ob es dafür nicht eine bessere Variante gibt.
LG
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich kenne den Aufbau deiner Datenbank nicht, aber warum fragst du nicht gleich in der SQL Abfrage den $nick ab?
z.B. so
$abfrage = "SELECT * FROM PunkteDB WHERE benutzername=$nick;
Damit hast du gleich den Datensatz der den Benutzer betrifft und brauchst nur noch die Punkte oder den Platz mit dem Namen ausgeben.
-
Du würdest schon viel optimieren, wenn du statt * die Spalten angibst.
In deinem Fall wird genau eine Spalte benötigt und nicht alle.
$name = htmlspecialchars(mysql_escape_string($row->name));
1. mysql_escape_string ist veraltet, nutze lieber mysql_real_escape_string.
2. Wieso ein escape an dieser Stelle? Das ist nur für Daten sinnvoll, die du in einer Abfrage verwenden willst. -
fachminchen schrieb:
Ich kenne den Aufbau deiner Datenbank nicht, aber warum fragst du nicht gleich in der SQL Abfrage den $nick ab?
z.B. so
$abfrage = "SELECT * FROM PunkteDB WHERE benutzername=$nick;
Damit hast du gleich den Datensatz der den Benutzer betrifft und brauchst nur noch die Punkte oder den Platz mit dem Namen ausgeben.
Danke schonmal an euch :)
@fachminchen:
Der Platz ist nicht in der DB gespeichert. Er ergibt sich durch die anzahl der Punkte.
LG -
Hallo christian1603,
Du kannst ja mal folgende Abfrage versuchen:
SELECT sq1.rank AS rank, sq1.name AS name FROM ( SELECT @rank:=@rank+1 AS rank, name, punkte FROM PunkteDB ORDER BY punkte DESC) AS sq1 WHERE sq1.name = '<gesuchter Name>'
In der Subquery wird durch '@rank' eine Variable eingeführt, die mit 0 initialisiert wird und die für jede Zeile um eins hochgezählt wird. Dadurch wird eine Tabelle erzeugt, die Rang und Name enthält.
Die äußere Abfrage wählt dann nur noch die gewünschte Zeile aus. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage