Rang Berechnen

EddieG

Erfahrenes Mitglied
Hallo,
ich habe ein ladder script geschrieben, welches nun einige Nutzer hat. Mein Problem ist nun wenn ich die Ausgabe der Tabellenplätze uf eine bestimmte anzahl setzen möchte und man dann über eine blätter Funktion weiter auf die hinteren plätze navigiert es die plätze pro Seite immer neu berechnet.
bisher schaut es so aus Beispiel
Wenn ich aber eben die Blätter Funktion einbau schaut das ganze so aus
Beispiel
Damit man es nach voll ziehen kann sollte man bei der navigation dann z.B. auf Seite zwei oder drei klicken ;)
so schaut das script bisher aus
PHP:
<title>1on1Ladder Low</title>
<body>
<center><h1>Tabelle</h1></center>
<table width="100%" border="1" cellspacing="0" cellpadding="1"><!--DWLayoutTable-->
<br>
<br><br>
<tr> 
    <td><b>Platz</b></td>
    <td><b>Spieler</b></td>
    <td><b>Sp.</b></td>
    <td><b>S</b></td>
    <td><b>N</b></td>
    <td><b>Winratio</b></td>
    <td><b>Punkte</b></td>

<?php
$rank=1;
$i=1;

$sql = mysql_query('SELECT COUNT(*) AS count FROM 2n2repasmusers'); // Tabelle zum zählen
$end = 5; // Wieviel Ausgaben pro Seite?
$url = '<a href="./'.basename($_SERVER['PHP_SELF']).'?none=0'; // Standardlink (z.B. ?action=home (also dann "none=0" durch "action=home" ersetzen)
// "none=0" stehen lassen oder ersetzen, aber nicht entfernen, da sonst fehler enstehen

/* AB HIER NICHTS MEHR ÄNDERN */
/**[ Code by LLCoolDannY - http://www.llcooldanny ]**/

$anz = mysql_result($sql, 0, 'count'); // Anzahl
mysql_free_result($sql);

$ges = ceil($anz / $end);
$start = !isset($_GET['start']) ? $start = 0 : $_GET['start']*$end;
$nStart = !isset($_GET['start']) ? $start = 0 : $_GET['start'];
$link = '';

$ges += 1;
if($nStart>=($ges)) {
die('Seite existiert nicht!');
}

$link .= ($nStart==0 ? '' : $url.'&amp;start='.($nStart-1).'">&laquo; Zur&uuml;ck</a> ');
if($ges>7) {
$ret = array();
for($i=1;$i<=$ges;$i++) {
$ret[] = (($i-1)!=$nStart ? $url.'&amp;start='.($i-1).'">['.$i.']</a> ' : $i.' ');
}
if($nStart<5 && $nStart>1) {
for($j=0;$j<2+$nStart;$j++) {
$link .= $ret[$j];
}
} else {
for($j=0;$j<3;$j++) {
$link .= $ret[$j];
}
}
$link .= ($nStart<=($ges-5) ? ($nStart>=5 ? ' ... '.$ret[$nStart-1].$ret[$nStart].(isset($ret[$nStart+1]) ? $ret[$nStart+1] : '') : '') : '');
$link .= ' ... '.($nStart==$ges-4 ? $ret[$ges-4] : '').$ret[$ges-3].$ret[$ges-2].$ret[$ges-1];
} else {
for($i=1;$i<=$ges;$i++) {
$link .= (($i-1)!=$nStart ? $url.'&amp;start='.($i-1).'">['.$i.']</a> ' : $i.' ');
}
}
$link .= ($nStart==($ges-1) ? '' : ' '.$url.'&amp;start='.($nStart+1).'">Weiter &raquo;</a>');


$sql = 'SELECT * FROM 2n2repasmusers ORDER BY punkte DESC LIMIT '.$start.', '.$end;
$query = mysql_query($sql);
while ($ds = mysql_fetch_object($query)) 
       {
       $id = $ds ->userID;
       $nick = $ds ->spieler;
       $punkte = $ds ->punkte;
       $s = $ds ->wins;
       $n = $ds ->lose;
       $anzahlspiele = $s + $n;

       $pt[$i]=$punkte;
       if(isset($pt[($i-1)]) && $pt[$i]!=$pt[($i-1)])  
       $rank++;
       $i++;

       if($punkte < 500)
          {
          $rankname = "D-";
       }
       elseif($punkte < 2000)
              {
              $rankname = "D";
       }
       elseif($punkte < 3000)
              {
              $rankname = "D+";
       }
       elseif($punkte < 4000)
              {
              $rankname = "C-";
       }
       elseif($punkte < 5000)
              {
              $rankname = "C";
       }
       elseif($punkte < 6000)
              {
              $rankname = "C+";
       }
       elseif($punkte < 7000)
              {
              $rankname = "B-";
       }
       elseif($punkte < 8000)
              {
              $rankname = "B";
       }
       elseif($punkte < 9000)
              {
              $rankname = "B+";
       }
       elseif($punkte < 10500)
              {
              $rankname = "A-";
       }
       elseif($punkte < 12000)
              {
              $rankname = "A";
       }
       else
           {
           $rankname = "A+";
       }

       if($anzahlspiele  >= 1)
          {
          $winratio = ($s / $anzahlspiele) *100;
          $winratio = number_format($winratio,2,".",",");

       }
       else
           {
           $winratio = 0;
       }
       echo "<tr><td><b>#$rank</td><td><img src=ranks/$rankname.jpg><a href=\"playerdetails.php?id=$id&nick=$nick&punkte=$punkte\" target=\"_self\">$nick</a></td><td>$anzahlspiele</td><td>$s</td><td>$n</td><td>$winratio %</td><td><b>$punkte</td></b>";
}
echo "<table><tr><td>$link;</td></table>";

// Einfach mit $link ausgeben

mysql_close();
?> 
</table></body></html>
 
So vielleicht:
PHP:
$i = 0;
while($ds = [...])
{
      [...]

	if( $i === 0 )
	{
		$strSql = "SELECT COUNT(*) AS `rank` FROM `2n2repasmusers` WHERE `punkte` < ". $punkte ." GROUP BY `punkte` ORDER BY `punkte` DESC";
		$intResult = mysql_query($strSql);
		$arrRow = mysql_fetch_assoc($intResult);
		$rank = intval($arrRow['rank']);
	}

       [...]
}
 
Du solltest die Variable $rank nicht mit 1 initialisieren.
Am einfachsten du schreibst die Variable $start nachdem du diese berechnet hast in $rank.

Grüße
 
komme da gerade nicht mit aber @chainy
hast du es so gemeint?
PHP:
$sql = 'SELECT * FROM 2n2repasmusers ORDER BY punkte DESC LIMIT '.$start.', '.$end;
$query = mysql_query($sql);
$i = 0;
while ($ds = mysql_fetch_object($query)) 
       {
       $id = $ds ->userID;
       $nick = $ds ->spieler;
       $punkte = $ds ->punkte;
       $s = $ds ->wins;
       $n = $ds ->lose;
       $anzahlspiele = $s + $n;

      /* $pt[$i]=$punkte;
       if(isset($pt[($i-1)]) && $pt[$i]!=$pt[($i-1)])  
       $rank++;
       $i++;*/

       if($punkte < 500)
          {
          $rankname = "D-";
       }
       elseif($punkte < 2000)
              {
              $rankname = "D";
       }
       elseif($punkte < 3000)
              {
              $rankname = "D+";
       }
       elseif($punkte < 4000)
              {
              $rankname = "C-";
       }
       elseif($punkte < 5000)
              {
              $rankname = "C";
       }
       elseif($punkte < 6000)
              {
              $rankname = "C+";
       }
       elseif($punkte < 7000)
              {
              $rankname = "B-";
       }
       elseif($punkte < 8000)
              {
              $rankname = "B";
       }
       elseif($punkte < 9000)
              {
              $rankname = "B+";
       }
       elseif($punkte < 10500)
              {
              $rankname = "A-";
       }
       elseif($punkte < 12000)
              {
              $rankname = "A";
       }
       else
           {
           $rankname = "A+";
       }

       if($anzahlspiele  >= 1)
          {
          $winratio = ($s / $anzahlspiele) *100;
          $winratio = number_format($winratio,2,".",",");

       }
       else
           {
           $winratio = 0;
       }
    if( $i === 0 )
    {
        $strSql = "SELECT COUNT(*) AS `rank` FROM `2n2repasmusers` WHERE `punkte` < ". $punkte ." GROUP BY `punkte` ORDER BY `punkte` DESC";
        $intResult = mysql_query($strSql);
        $arrRow = mysql_fetch_assoc($intResult);
        $rank = intval($arrRow['rank']);
    }

          echo "<tr><td><b>#$rank</td><td><img src=ranks/$rankname.jpg><a href=\"playerdetails.php?id=$id&nick=$nick&punkte=$punkte\" target=\"_self\">$nick</a></td><td>$anzahlspiele</td><td>$s</td><td>$n</td><td>$winratio %</td><td><b>$punkte</td></b>";
}
echo "<table><tr><td>$link;</td></table>";
}  


// Einfach mit $link ausgeben

mysql_close();
 
ne, versuch's mal so:


PHP:
$sql = 'SELECT * FROM 2n2repasmusers ORDER BY punkte DESC LIMIT '.$start.', '.$end;
$query = mysql_query($sql);
$i = 0;
while ($ds = mysql_fetch_object($query)) 
       {
       $id = $ds ->userID;
       $nick = $ds ->spieler;
       $punkte = $ds ->punkte;
       $s = $ds ->wins;
       $n = $ds ->lose;
       $anzahlspiele = $s + $n;

    if( $i === 0 )
    {
        $strSql = "SELECT COUNT(*) AS `rank` FROM `2n2repasmusers` WHERE `punkte` < ". $punkte ." GROUP BY `punkte` ORDER BY `punkte` DESC";
        $intResult = mysql_query($strSql);
        $arrRow = mysql_fetch_assoc($intResult);
        $rank = intval($arrRow['rank']);
    }

       $pt[$i]=$punkte;
       if(isset($pt[($i-1)]) && $pt[$i]!=$pt[($i-1)])  
       $rank++;
       $i++;

       if($punkte < 500)
          {
          $rankname = "D-";
       }
       elseif($punkte < 2000)
              {
              $rankname = "D";
       }
       elseif($punkte < 3000)
              {
              $rankname = "D+";
       }
       elseif($punkte < 4000)
              {
              $rankname = "C-";
       }
       elseif($punkte < 5000)
              {
              $rankname = "C";
       }
       elseif($punkte < 6000)
              {
              $rankname = "C+";
       }
       elseif($punkte < 7000)
              {
              $rankname = "B-";
       }
       elseif($punkte < 8000)
              {
              $rankname = "B";
       }
       elseif($punkte < 9000)
              {
              $rankname = "B+";
       }
       elseif($punkte < 10500)
              {
              $rankname = "A-";
       }
       elseif($punkte < 12000)
              {
              $rankname = "A";
       }
       else
           {
           $rankname = "A+";
       }

       if($anzahlspiele  >= 1)
          {
          $winratio = ($s / $anzahlspiele) *100;
          $winratio = number_format($winratio,2,".",",");

       }
       else
           {
           $winratio = 0;
       }


          echo "<tr><td><b>#$rank</td><td><img src=ranks/$rankname.jpg><a href=\"playerdetails.php?id=$id&nick=$nick&punkte=$punkte\" target=\"_self\">$nick</a></td><td>$anzahlspiele</td><td>$s</td><td>$n</td><td>$winratio %</td><td><b>$punkte</td></b>";
}
echo "<table><tr><td>$link;</td></table>";
}  


// Einfach mit $link ausgeben

mysql_close();
 
Nein das geht leider auch nicht
es funktioniert auf Seite zwei noch aber ab der Seite drei beginnt es wieder von 1
 
Dann bleibt Dir wohl nichts anderes übrig, als das ganze mal vernünftig zu debuggen. Lass dir mal die Query ausgeben und setz sie mal über den pma selbst ab und schau dir das Ergebnis an....
 
Uhm.. was meinst du mit pma?
was soll da debugged werden hat doch alles seine Richtigkeit error Reporting all ist auch drinnen und es kommen keine Fehler.
ich habe Hier im Forum noch einmal etwas gesucht und auch was gefunden allerdings klappt es bei mir nicht.
Es heißt das es so gehen sollte
SELECT
t1.`id`,
t1.`name`,
t1.`punkte`,
t1.`geld`,
(SELECT
(COUNT(*)+1)
FROM userrang AS t2
WHERE t2.`Punkte`>t1.`punkte`
) AS `Rang`
FROM userrang AS t1
ORDER BY `Rang`
Bei mir kommt aber Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/apache2-default/2n2ladderTEST/test/ladderLowTable.php on line 105
das ist diese Zeile
PHP:
 while ($ds = mysql_fetch_object($query))
hier der Code
PHP:
error_reporting(E_ALL);
$sql = mysql_query('SELECT COUNT(*) AS count FROM 2n2repasmusers'); // Tabelle zum zählen
$end = 5; // Wieviel Ausgaben pro Seite?
$url = '<a href="./'.basename($_SERVER['PHP_SELF']).'?none=0'; // Standardlink (z.B. ?action=home (also dann "none=0" durch "action=home" ersetzen)
// "none=0" stehen lassen oder ersetzen, aber nicht entfernen, da sonst fehler enstehen

/* AB HIER NICHTS MEHR ÄNDERN */
/**[ Code by LLCoolDannY - http://www.llcooldanny ]**/

$anz = mysql_result($sql, 0, 'count'); // Anzahl
mysql_free_result($sql);

$ges = ceil($anz / $end);
$start = !isset($_GET['start']) ? $start = 0 : $_GET['start']*$end;
$nStart = !isset($_GET['start']) ? $start = 0 : $_GET['start'];
$link = '';

$ges += 1;
if($nStart>=($ges)) {
die('Seite existiert nicht!');
}

$link .= ($nStart==0 ? '' : $url.'&amp;start='.($nStart-1).'">&laquo; Zur&uuml;ck</a> ');
if($ges>7) {
$ret = array();
for($i=1;$i<=$ges;$i++) {
$ret[] = (($i-1)!=$nStart ? $url.'&amp;start='.($i-1).'">['.$i.']</a> ' : $i.' ');
}
if($nStart<5 && $nStart>1) {
for($j=0;$j<2+$nStart;$j++) {
$link .= $ret[$j];
}
} else {
for($j=0;$j<3;$j++) {
$link .= $ret[$j];
}
}
$link .= ($nStart<=($ges-5) ? ($nStart>=5 ? ' ... '.$ret[$nStart-1].$ret[$nStart].(isset($ret[$nStart+1]) ? $ret[$nStart+1] : '') : '') : '');
$link .= ' ... '.($nStart==$ges-4 ? $ret[$ges-4] : '').$ret[$ges-3].$ret[$ges-2].$ret[$ges-1];
} else {
for($i=1;$i<=$ges;$i++) {
$link .= (($i-1)!=$nStart ? $url.'&amp;start='.($i-1).'">['.$i.']</a> ' : $i.' ');
}
}
$link .= ($nStart==($ges-1) ? '' : ' '.$url.'&amp;start='.($nStart+1).'">Weiter &raquo;</a>');


$sql = "SELECT t1.`userID`,t1.`spieler`,t1.`punkte`,t1.`wins`,t1.`lose` (SELECT 
  (COUNT(*)+1) FROM 2n2repasmusers AS t2 WHERE t2.`Punkte`>t1.`punkte`) AS `Rang` FROM 2n2repasmusers AS t1 ORDER BY `Rang` LIMIT ".$start.", ".$end;
$query = mysql_query($sql);
while ($ds = mysql_fetch_object($query))
       {
       $id = $ds ->userID;
       $nick = $ds ->spieler;
       $punkte = $ds ->punkte;
       $s = $ds ->wins;
       $n = $ds ->lose;
       $anzahlspiele = $s + $n;

/*       $pt[$i]=$punkte;
       if(isset($pt[$i-1]) && $pt[$i]!=$pt[$i-1])
       $rank++;
       $i++;*/

       if($punkte < 500)
          {
          $rankname = "D-";
       }
       elseif($punkte < 2000)
              {
              $rankname = "D";
       }
       elseif($punkte < 3000)
              {
              $rankname = "D+";
       }
       elseif($punkte < 4000)
              {
              $rankname = "C-";
       }
       elseif($punkte < 5000)
              {
              $rankname = "C";
       }
       elseif($punkte < 6000)
              {
              $rankname = "C+";
       }
       elseif($punkte < 7000)
              {
              $rankname = "B-";
       }
       elseif($punkte < 8000)
              {
              $rankname = "B";
       }
       elseif($punkte < 9000)
              {
              $rankname = "B+";
       }
       elseif($punkte < 10500)
              {
              $rankname = "A-";
       }
       elseif($punkte < 12000)
              {
              $rankname = "A";
       }
       else
           {
           $rankname = "A+";
       }

       if($anzahlspiele  >= 1)
          {
          $winratio = ($s / $anzahlspiele) *100;
          $winratio = number_format($winratio,2,".",",");

       }
       else
           {
           $winratio = 0;
       }
          echo "<tr><td><b>#$Rang</td><td><img src=ranks/$rankname.jpg><a href=\"playerdetails.php?id=$id&nick=$nick&punkte=$punkte\" target=\"_self\">$nick</a></td><td>$anzahlspiele</td><td>$s</td><td>$n</td><td>$winratio %</td><td><b>$punkte</td></b>";
}
echo "<table><tr><td>$link;</td></table>";



// Einfach mit $link ausgeben

mysql_close();  
?> 
</table></body></html>
 
Zuletzt bearbeitet:
Mit pma meinte ich PHPMyAdmin...

mysql_query($sql) or die(mysql_error()); und die Fehlermeldung wird sich darauf beziehen, dass er nicht nach `Rang` sortieren kann....
 
die Meldung lautet
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT (COUNT(*)+1) FROM 2n2repasmusers AS t2 WHERE t2.`Punkte`>t1.`punkte`)' at line 1
sehe da aber keinen Fehler :(
 
Zurück