Hallo,
Ich bin dabei für ein mmorpg eine Ligatabelle zu überarbeiten.
Die Teams werden nach Punktestand in absteigender ( sowie nach Anzahl Spielen in aufsteigender) Reihenfolge sortiert.
Dieser Code besteht und funktioniert so auch.
Nun besteht folgendes Problem:
Der Rang wird auf jeder neuen Zeile um 1 erhöht. 1.Rang, 2.Rang, 3.Rang usw. Leider ist es allerdings so, dass oft mehrere Teams den gleichen Punktestand aufweisen, und somit logischerweise auch den selben Rang belegen. Belegen zwei Teams den ersten Rang, so hat das Team mit dem nächstkleineren Punktestand logischerweise den dritten Rang inne. Anhand des folgenden Beispiels sollte deutlich werden, was gemeint ist.
Beispiel:
1.Rang -- Clan8 -- 6 Punkte
1.Rang -- Clan6 -- 6 Punkte
3.Rang -- Clan1 -- 4 Punkte
4.Rang -- Clan3 -- 3 Punkte
5.Rang -- Clan5 -- 2 Punkte
5.Rang -- Clan4 -- 2 Punkte
5.Rang -- Clan2 -- 2 Punkte
8.Rang -- Clan7 -- 1 Punkte
Mit der Variablen $i wird der Rang berechnet und ausgegeben. Das war ja auch gut so, bisher. Am Ende jedes Durchgangs der while Schleife wird die $i folgendermassen erhöht: $i++.
Meine vage Idee wie im neuen System die Ränge berechnet werden könnten, ist folgende:
Wenn mehr als ein Clan einen bestimmten Punktestand hat wird nach der Schleife $i nicht erhöht.
Erst beim Clan mit dem nächsttieferen Punktestand wird $i um die Anzahl vorhergehender Clans/Ränge mit dem selben Punktestand erhöht.
Beispiel:
1.Rang -- Clan8 -- 6 Punkte
------ (der nächste Clan hat denselben Punktestand, also wird $i nicht erhöht)
1.Rang -- Clan6 -- 6 Punkte (2 Clans sind auf dem 1. Rang)
------ $i wird um 2 erhöht (1 + 2 = 3, folglich ist der nächste Rang der dritte Rang.)
3.Rang -- Clan1 -- 4 Punkte
------ $i++
4.Rang -- Clan3 -- 3 Punkte
------ $i++
5.Rang -- Clan5 -- 2 Punkte
------ (der nächste Clan hat denselben Punktestand, also wird $i nicht erhöht)
5.Rang -- Clan4 -- 2 Punkte
-----(der nächste Clan hat denselben Punktestand, also wird $i nicht erhöht)
5.Rang -- Clan2 -- 2 Punkte (3 Clans sind auf dem 5. Rang)
------ $i wird um 3 erhöht (5 + 3 = 8, folglich ist der nächste Rang der achte Rang.)
8.Rang -- Clan7 -- 1 Punkte
Seht ihr eine Möglichkeit, wie diese Schleife hier angepasst werden könnte, um das neue Rangsystem korrekt zu berechnen?
Damit ihr euch ein Bild davon machen könnt, wie die Berechnung aktuell durchgeführt wird:
PHP-Code:
$i = 1;
while ($row = mysql_fetch_assoc($result)) {
$ClanId = $row['clan_id'];
$division = $row['division_id'];
NewerthConnect();
//show the divison (EU, USA, HvH)
$query = "SELECT * FROM sl_division WHERE division_id = '$division'";
$result2 = mysql_query($query) OR print(mysql_error()."<br />");
$row2 = mysql_fetch_assoc($result2);
$division = $row2['division_name'];
$query = "SELECT * FROM sl_match WHERE (winner_id = '$ClanId' AND date_season = '$CurrentSeason')";
$result2 = mysql_query($query) OR print(mysql_error()."<br />");
$Wins = mysql_numrows($result2);
$query = "SELECT * FROM sl_match WHERE (winner_id != '$ClanId' AND date_season = '$CurrentSeason') AND (clan_id1 = '$ClanId' OR clan_id2 = '$ClanId') AND (winner_id > 0)";
$result2 = mysql_query($query) OR print(mysql_error()."<br />");
$Losses = mysql_numrows($result2);
$query = "SELECT * FROM sl_match WHERE (winner_id = '-1' AND date_season = '$CurrentSeason') AND (clan_id1 = '$ClanId' OR clan_id2 = '$ClanId')";
$result2 = mysql_query($query) OR print(mysql_error()."<br />");
$Ties = mysql_numrows($result2);
?>
<tr>
<td>
#<? echo $i; ?>
</td>
<td>
<? echo ClanFormat($ClanId); ?>
</td>
<td>
<? echo $Wins; ?>
</td>
<td>
<? echo $Ties; ?>
</td>
<td>
<? echo $Losses; ?>
</td>
<td>
<? if ($row['clan_matches']) { echo $row['clan_points']; } else { echo "N/A"; } ?>
</td>
<td>
<? echo $division; ?>
</td>
</tr>
<?
$i++;
}
?>
Bin gespannt auf eure Vorschläge!