kostenloser Webspace werbefrei: lima-city


"Platzierung" nach Punkten anzeigen [MYSQL]

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    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

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. 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.
  5. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    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
  6. 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.
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!