Hier ist ein Patch, der dafür sorgt, dass die Tabelle der Mitspieler nicht mehr alphabetisch, sondern gemäß Punkte sortiert werden.
Dazu musste der Punkte-Stand mittels LEFT-JOIN in die Hauptabfrage einfließen, um nach ihr sortieren zu können. Die Einzelabfrage des Punktestandes konnte dann entfallen.
Das komische Konstrukt mit "<<< __EOT__" und "__EOT__;" ist ein sogenanntes "here document", wobei der frei wählbare Marker EOT = End-Of-Text bedeutet.. Alles dazwischen wird als mehrzeilige Zeichenkette betrachtet. Ich empfinde es viel übersichtlicher als die vielen Zeichenketten-Operationen. Das ganze birgt aber eine Falle: PHP verlangt, dass der Ende-Marker (hier "__EOT__;" ganz alleine in einer Zeile steht und *NICHT* eingerückt ist.
- --- teilnehmer.ansicht.php.orig 2016-05-01 15:48:08.000000000 +0200
- +++ teilnehmer.ansicht.php 2016-06-11 08:59:32.097820024 +0200
- @@ -67,15 +67,20 @@
- $StartPage = ((isset($RUNTIME['PATH'][2]) ? $RUNTIME['PATH'][2] : 1) -1)*$CONFIG['RANGLISTE']['UPP'];
- -$query = "SELECT * FROM ". $CONFIG['MYSQL']['PREFIX'] ."users WHERE isUnlocked = 1 ORDER BY usr LIMIT ". $StartPage .",". $CONFIG['RANGLISTE']['UPP'];
- +$query = <<< __EOT__
- + SELECT u.*, r.pkt
- + FROM {$CONFIG['MYSQL']['PREFIX']}users u
- + LEFT JOIN {$CONFIG['MYSQL']['PREFIX']}rangliste_boni r
- + ON r.uid = u.id
- + WHERE u.isUnlocked = 1
- + ORDER BY ifnull(r.rang,999999999), u.usr
- + LIMIT $StartPage, {$CONFIG['RANGLISTE']['UPP']}
- +__EOT__;
- $sql = mysql_query($query);
- while ($row = mysql_fetch_array($sql))
- {
- - $sqlpkt = mysql_query("SELECT pkt FROM ". $CONFIG['MYSQL']['PREFIX'] ."rangliste_boni WHERE uid ='". $row['id'] ."'");
- - $rowpkt = mysql_fetch_array($sqlpkt);
- -
- - $pkt = $rowpkt['pkt'];
- + $pkt = $row['pkt'];
- $rank = (int)getRanglistenplatz("boni", $row['id']);
- $name = $row['usr'];
- $id = $row['id'];
Nachtrag:
Beim Stöbern in diesem Forum habe ich gerade "Rangliste: Auf einen Blick ..." entdeckt. Dieses macht den Patch evtl unnötig. Ich werde ihn aber bei mir belassen. Dann haben wir halt ne 2.Übersicht, die nach Punkten sortiert ist und ein wenig optimierter arbeitet.