sortier funktion in einer tabelle

nox

Erfahrenes Mitglied
hy @all

hab folgendes prob:

die gesamte tabelle einer daten bank wird dargestellt, damit das ganze nicht unübersichtlich wird kann man die spalten sortieren.

wenn man den tabellen - kopf anklickt (titel der spalte) muss es deren einträge sortieren. soweit so gut!

nur werden in der letzten spalte (spalte 3 / spalet4 = spalte5) die ergebnisse nicht richtig sortiert!

ist vieleicht einbisschen unklar was ich meine darum poste ich mal einbisschen sourcecode
PHP:
<?php

function cmp($a,$b) 
{  
    // sortierfunktion
    global $sort_by;
    if ($a[$sort_by] == $b[$sort_by]) return 0;
    return (strtolower ($a[$sort_by]) > strtolower ($b[$sort_by])) ? -1 : 1;
}

function cmpdesc($a,$b)
{  
    // sortierfunktion
    global $sort_by_d;
    if ($a[$sort_by_d] == $b[$sort_by_d]) return 0;
    return (strtolower ($a[$sort_by_d]) < strtolower ($b[$sort_by_d])) ? -1 : 1;    
}
?>
<html>
<body bgcolor="#CCCCCC" text="#000000">

<?php
echo "<table>";

$asc_desc = isset($sort_by)?'sort_by_d':'sort_by';

echo "<tr>".
"<td><div align='center'><b>Rang</b></div></td>".
"<td><b>Spieler</b></td>".
"<td><div align='center'><b>Streiche</b></div></td>".
"<td><div align='center'><b>Punkte</b></div></td>".
"<td><div align='center'><b><a href=\"$PHP_SELF?$asc_desc=4\">Schnitt</a></b></div></td> </tr></b>";

$data= array();

	//Tabellen Daten
	
for ($i=0; $i<$num; $i++)
{
	$data[] = array(
	 mysql_result($res, $i, "name"),
	 mysql_result($res, $i, "vorname"),
	 $st=mysql_result($res, $i, "streiche"),
	 $pt=mysql_result($res, $i, "punkte"),
	 number_format(($pt/$st),3,",","."),
	 ($i+1));	  
}

if (isset($sort_by))
  usort($data, cmp); // array nach dem Feld $data[][$sort_by] sortieren


if (isset($sort_by_d))
  usort($data, cmpdesc); // array nach dem Feld $data[][$sort_by_d] sortieren

  for($i=0;$i<count($data);$i++)
  echo "<tr><td>".($i+1)."</td><td>".$data[$i][0]." ".$data[$i][1]."</td><td>".$data[$i][2]."</td>".
       "<td>".$data[$i][3]."</td><td>".$data[$i][4]."</td></tr>";	
	//Ende Tabelle

echo "</table>";

mysql_close($db);

?>
</body>
</html>
das ergebnis in der letzten tabelle ist z.B. dann so:
8.151
7.450
7.441
5.100
19.645
19.620
18.775
etz.....

sollte aber:

19.645
19.620
18.775
8.151
7.450
7.441
5.100

hoffe ihr findet eine lösung hab schon sämtliche suchfunktionen durchgerattert:-)

Ps: natürlich werden alle spalten sortiert!
habe die sortierung der anderen spalten rausgenommen um herauszufinden warum das ganze nicht klappt :D
 
Zuletzt bearbeitet:
und wieso sortierst du das ganze nicht per mysql?
ORDER BY spalte DESC/ASC ???
 
und wieso sortierst du das ganze nicht per mysql?
ORDER BY spalte DESC/ASC ???
weil eben die 5te spalte ausgerechnet wird! und nicht in der DB gespeichert wird:
PHP:
for ($i=0; $i<$num; $i++)
{
    $data[] = array(
     mysql_result($res, $i, "name"),
     mysql_result($res, $i, "vorname"),
     $st=mysql_result($res, $i, "streiche"),
     $pt=mysql_result($res, $i, "punkte"),

     number_format(($pt/$st),3,",","."),   // AUSRECHNUG DER SPALTE 5

     ($i+1));      
}
Danke für deinen gedankenanstoss %) hat mir woander weiter geholfen :-)
 
Zuletzt bearbeitet:
schieb alles was du ausliest in ein array

sotier das array an hand der ausgerechneten Spalte und gib es per foreach wieder aus :)

nimm am besten ein 2 dimensionales array:

Dimension 1 da speicherst dein ausgerechnete Spalte rein und dimension 2 die dazugehoerigen Daten.

währe eine von vielen möglichkeiten :)
 
das geht alles auch einfacher:

PHP:
$sql = "SELECT a,b,(a/b) as q FROM table";

nun hast du spalte a, b und q welche sich aus a/b berechnet ...
 
danke gecko
habe deine version gebraucht;)
dank auch an HolyFly deine version klingt aber etwas kompliziert %)

GREEZ

N
O
X
 
Zurück