Antworten auf deine Fragen:
Neues Thema erstellen

php/mysql highscoreliste

XIIZQ

Noch nicht viel geschrieben

moinsen,

ich habe eine highscoreliste die ich mit while führe, das problem ist aber,
das ich eine sache hinzufügen möchte und dafür das script was ich für die
top 100 nehme, nicht funzt.

PHP:
        $sql="SELECT `spieler`,`pkt` FROM `user` ORDER BY `pkt` DESC Limit 100";    
            $i = 0;
            
                    $result=mysql_query($sql) or die(mysql_error());
            while    ($row=mysql_fetch_array($result)) {
         
            $spieler=$row              ['spieler'];    $i++;   
            $pkt=$row                    ['pkt'];    
                
        echo"    <div class=rang'>$i</div>
                <div class='spieler'>$spieler</div>
                <div class='punkte'>";
                echo number_format($row['pkt'], 0, ',', '.'); 
        echo"    </div>"; 
        
        
    }
damit lass ich die top100 anzeigen, jetzt würde ich aber gerne das auf der
gleichen seite noch der eigene rang steht von dem user der eingeloggt ist,
sprich ( user xyz, dein rang ist 101 und somit nicht in der highscore
vorhanden.

ich denke mal das es man nen befehl schreiben muss wo man in der db
prüft wieviele spieler es gibt und dann berechnet wird wieviel punkte
man selber hat und wieviele vor einstehen die mehr punkte haben.
stehe aber was das angeht etwas auf dem schlauch ^^°

kann mir da weiterhelfen bitte?
 

Duddle

Posting-Frequenz: 14µHz

AW: php/mysql highscoreliste

Es ist ohne genauere Kenntnis des Systems unmöglich, dir zu sagen was du anpassen musst. Genauer:
  1. Wie speicherst du den aktuell eingeloggten User bzw. lässt ihn ausgeben?
  2. Wie berechnest du den Rang? Nur nach Punktzahl? Was, wenn zwei Nutzer die gleiche Punktzahl haben?

Duddle
 

XIIZQ

Noch nicht viel geschrieben

AW: php/mysql highscoreliste

Es ist ohne genauere Kenntnis des Systems unmöglich, dir zu sagen was du anpassen musst. Genauer:
  1. Wie speicherst du den aktuell eingeloggten User bzw. lässt ihn ausgeben?
  2. Wie berechnest du den Rang? Nur nach Punktzahl? Was, wenn zwei Nutzer die gleiche Punktzahl haben?

Duddle

1. der user steht in der db samt pw und co, er loggt sich ein, sieht sein namen,
seine punkte etz. und wenn er auf die highscore geht, wird diese nur includet
womit er immernoch eingeloggt ist ^^

2. der rang soll nur nach punkte gerechnet werden und wenn zwei die gleichen
punkte haben ist es halt zufall wer rang 1 oder 2 ist
 

Duddle

Posting-Frequenz: 14µHz

AW: php/mysql highscoreliste

Okay, dann weißt du ja wie du seinen Namen ausgeben kannst.

2. der rang soll nur nach punkte gerechnet werden

Dann lass dir von der Datenbank die Punkte des Nutzers geben und hol dir die Anzahl der Datensätze mit Punktzahl größer dieser Punktzahl.
Beispiel:
Benutzer A hat 42 Punkte. Also fragst du die DB nach allen Nutzern, die (sortiert nach Punktzahl) mehr Punkte als 42 haben. Die Anzahl der Ergebnisse - und damit Nutzer über A - bekommst du per mysql_num_rows(). Sind das angenommen 782 Zeilen / Ergebnisse, hat A den Rang 783.


Duddle
 

XIIZQ

Noch nicht viel geschrieben

AW: php/mysql highscoreliste

ich bekomm das grad nicht hin, muss ich das mit where machen damit
er mir den rang anzeigt? oder wie meinst das?
 

Duddle

Posting-Frequenz: 14µHz

AW: php/mysql highscoreliste

Wie sieht die SQL-Anweisung aus, um aus einer Tabelle irgendeine Spalte auszuwählen mit der Einschränkung dass diese Spalte einen bestimmten Wert hat?



Duddle
 

XIIZQ

Noch nicht viel geschrieben

AW: php/mysql highscoreliste

Wie sieht die SQL-Anweisung aus, um aus einer Tabelle irgendeine Spalte auszuwählen mit der Einschränkung dass diese Spalte einen bestimmten Wert hat?



Duddle

zurzeit sieht es so aus

PHP:
            $sql4="SELECT `pkt` FROM `user` ORDER BY `pkt` DESC";    
            $result4=mysql_query($sql4) or die(mysql_error());
            $row4 = mysql_num_rows($result4); 

                    echo mysql_num_rows($result4);

damit bekomme ich nur die anzahl was ja richtig ist soweit,
muss nur eben noch die anweisung rein das er berechnen soll
welcher platz der spieler nun ist..
 

Duddle

Posting-Frequenz: 14µHz

AW: php/mysql highscoreliste

Genau das war ja meine Frage: wie grenzt du deine Ergebnisse so ein, dass nur die Zeilen zurückgegeben werden, deren Wert in `pkt` größer als ein übergebener Wert ist?

Falls du es nicht weißt, lies und wende es an.


Duddle
 

vandenhayes

Noch nicht viel geschrieben

AW: php/mysql highscoreliste

hmm eigentlich ganz einfach,

da Du eine tabelle in die andere einfügst, müssen di ja auch eine beziehung untereinander haben(sprich nen schlüssel)
Nehmen wir an, das deine User_ID in beiden tabellen vorkommt :

dann hätten wir also :
$pw = $_SESSION[pw];
$user = $_SESSION[user];
$i = 1;
$sql = mysql_query("SELECT * FROM 'user' ORDER BY 'pkt' DESC");
while($row_users = mysql_fetch_array($sql))
{
if($row_users[pw] == $pw && $row_users[user] == $user)
{
echo('Dein Rang ist :'.$i);
}
$i++;
}
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: php/mysql highscoreliste

dann hätten wir also :
PHP:
$pw = $_SESSION[pw];
$user = $_SESSION[user];
$i = 1;
$sql = mysql_query("SELECT * FROM 'user' ORDER BY 'pkt' DESC");
while($row_users = mysql_fetch_array($sql))
{
if($row_users[pw] == $pw && $row_users[user] == $user)
{
echo('Dein Rang ist :'.$i); 
}
$i++;
}

Sagen wir großzügig, es gibt 100k Nutzer in diesem System. Der durchschnittliche Nutzer ist somit auf Rang 50.000. Dein Algorithmus braucht daher für jeden Aufruf dieser Routine im Durchschnitt 50.000 * 2 Vergleiche und 50.000 Zuweisungen, also abstrakt betrachtet 150.000 Anweisungen.
Deine Lösung funktioniert zwar, aber sie skaliert nicht.

Im Vergleich dazu der o.g. Ansatz, teilweise schon umgesetzt von XIIZQ:
PHP:
$sql4="SELECT `pkt` FROM `user` WHERE `pkt` > $punkte_von_aktivem_benutzer";    
            $result4=mysql_query($sql4) or die(mysql_error());
            $row4 = mysql_num_rows($result4); 

                    echo "Rang: ".$row4+1;

Das braucht eine Anweisung. Den Großteil der Arbeit macht die Datenbank und die optimiert das meiste davon sowieso.


Duddle
 
Zuletzt bearbeitet:

XIIZQ

Noch nicht viel geschrieben

AW: php/mysql highscoreliste

Im Vergleich dazu der o.g. Ansatz, teilweise schon umgesetzt von XIIZQ:
PHP:
$sql4="SELECT `pkt` FROM `user` WHERE `pkt` > $punkte_von_aktivem_benutzer";    
            $result4=mysql_query($sql4) or die(mysql_error());
            $row4 = mysql_num_rows($result4); 

                    echo "Rang: ".$row4+1;
Das braucht eine Anweisung. Den Großteil der Arbeit macht die Datenbank und die optimiert das meiste davon sowieso.


Duddle

ahh danke, klappt soweit jetzt ;-)
PHP:
  $sql4="SELECT `pkt` FROM `user` WHERE `pkt` > $gg";    
            $result4=mysql_query($sql4) or die(mysql_error());
            $row4 = mysql_num_rows($result4); 

                    $rang = $row4+1;

und davor eine abfrage wie die punkte vom eingeloggten spieler sind ^^
danke sehr
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben