Seite 1 von 5
Zahlen richtig sortieren
Verfasst: 12.01.2003 23:51
von Condor
Hallo,
ich habe eine Tabelle, die man nach verschiedenen Spalten sortieren lassen kann.
Eine Spalte hat nur Zahlen. Wenn ich diese jetzt abwärts sortieren lasse, ist eine 9 höher in der Tabelle (also als erstes in der Tabelle) als eine 18. Was muss ich machen, damit das Script die richtig sortiert ?
Verfasst: 13.01.2003 00:13
von PhilippK
Was hast du denn für 'ne Tabelle???
Gruß, Philipp
Verfasst: 13.01.2003 01:15
von Condor
Hi,
ich habe eine Fussball-Tabelle. Aus meiner DB werden halt Tore, Tordifferenz etc. in dieser Tabelle ausgegeben. Wenn ich jetzt nach Tordifferenz sortieren lasse, ist die Mannschaft die eine Diff. von 8 haben in der Tabelle höher als die Mannschaft die die höchste Diff. von 18 haben. Kann mir jemand da helfen ?
Verfasst: 13.01.2003 07:49
von PhilippK
Nein, ich meinte eigentlich: um was für 'ne Tabelle handelt es sich mehr aus technischer Sicht - nicht vom Inhalt her. Liegt die dir in PHP als Array vor, handelt es sich um 'ne MySQL-Tabelle oder um was?
Gruß, Philipp
Verfasst: 13.01.2003 08:33
von itst
'ORDER BY spaltenname DESC' und absteigend zu sortieren (größte Zahl oben).
'ORDER BY spaltenname ASC' und aufsteigend zu sortieren (kleinste Zahl oben).
Verfasst: 14.01.2003 00:20
von Condor
Hallo,
es funktioniert einfach nicht. Die 9 ist immer vor der 18. Damit das jeder vielleicht besser verstehen kann, hier ist der Code:
Code: Alles auswählen
<?
if (!eregi("modules.php", $PHP_SELF)) {
die ("You can't access this file directly...");
}
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
require_once("modules/$module_name/config.php");
$index=1;
include("header.php");
OpenTable();
// Quelltext
@mysql_select_db ($dbase) or die ("Kann Datenbank nicht finden");
$result1 = mysql_query("SELECT * FROM config", $conn);
list($tab) = sql_fetch_row($result1, $conn);
if ($tab==0) {
$tableborder = "<TABLE BORDER=1 cellspacing=0 rules=none bordercolor=#000000>";
} else {
$tableborder = "<TABLE BORDER=0 cellspacing=0>";
$tableunten = "<tr bgcolor=#595959><td height=1 colspan=18></td></tr>";
// $tableseiten = "<TD width=1% bgcolor=#595959 rowspan=18></td>";
}
if(!isset($sort)) {
$result = mysql_query("SELECT * FROM $table ORDER by punkte DESC, tordiff DESC", $conn);
} else {
$sortdir = ($sort=='team') ? 'ASC' : 'DESC';
$result = mysql_query("SELECT * FROM $table ORDER BY $sort $sortdir", $conn);
}
if($sort=='platz') {
$colorplatz = 'red';
} else {
$colorplatz = '#000000';
}
if($sort=='team') {
$colorverein = 'red';
} else {
$colorverein = '#000000';
}
if($sort=='punkte') {
$colorpunkte = 'red';
} else {
$colorpunkte = '#000000';
}
if($sort=='gtore') {
$coloret = 'red';
} else {
$coloret = '#000000';
}
if($sort=='btore') {
$colorgt = 'red';
} else {
$colorgt = '#000000';
}
if($sort=='tordiff') {
$colordiff = 'red';
} else {
$colordiff = '#000000';
}
$number = mysql_num_rows($result);
echo "<P>Es sind $number Datensätze gelesen worden.</P>";
echo $tableborder;
echo $tableunten;
echo "<TR style='background-color:#d9ecec'>";
echo $tableseiten;
echo "<TD width=10%><P ALIGN =CENTER><A HREF='$PHP_SELF?name=Tabellesort&sort=platz'><FONT COLOR='$colorplatz'>Platz</A></FONT></TD>";
echo "<TD width=35%><P ALIGN =CENTER><A HREF='$PHP_SELF?name=Tabellesort&sort=team'><FONT COLOR='$colorverein'>Verein</A></FONT></TD>";
echo "<TD width=10%><P ALIGN =CENTER><A HREF='$PHP_SELF?name=Tabellesort&sort=punkte'><FONT COLOR='$colorpunkte'>Punkte</A></FONT></TD>";
echo "<TD width=10%><P ALIGN =CENTER><A HREF='$PHP_SELF?name=Tabellesort&sort=gtore'><FONT COLOR='$coloret'>ET</A></FONT></TD>";
echo "<TD width=10%><P ALIGN =CENTER><A HREF='$PHP_SELF?name=Tabellesort&sort=btore'><FONT COLOR='$colorgt'>GT</A></FONT></TD>";
echo "<TD width=10%><P ALIGN =CENTER><A HREF='$PHP_SELF?name=Tabellesort&sort=tordiff'><FONT COLOR='$colordiff'>Diff</A></FONT></TD>";
echo $tableseiten;
echo "</TR>";
echo $tableunten;
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$platz++;
$color = ($platz%2 == 0) ? '#f5f5f5' : '#ffffff';
echo '<TR style="background-color:' . $color . '">';
echo "<TD><P ALIGN =CENTER>";
echo $row['platz'];
echo $platz;
echo "</TD>";
echo "<TD>";
echo $row['team'];
echo "</TD>";
echo "<TD><P ALIGN =CENTER>";
echo $row['punkte'];
echo "</TD>";
echo "<TD><P ALIGN =CENTER>";
echo $row['gtore'];
echo "</TD>";
echo "<TD><P ALIGN =CENTER>";
echo $row['btore'];
echo "</TD>";
echo "<TD><P ALIGN =CENTER>";
echo $row['tordiff'];
echo "</TD>";
echo "</TR>";
}
echo $tableunten;
echo "</TABLE>";
CloseTable();
include("footer.php");
?>
Verfasst: 14.01.2003 00:32
von Condor
Hallo,
ich habe da aber noch ein Problem.
Ich habe eine Tabelle sortieren lassen. Die informationen kommen alle aus einer DB.
Jetzt habe ich z.B so sortiert: "SELECT * FROM $table ORDER by punkte DESC, diff DESC".
Nun möchte ich aber, das in der ersten spalte der tabelle eine Reihenfolge existiert, also
das dort der erste Datensatz, der durch diese Sortierung erster ist, auch den Platz 1 stehen
hat. Ich meine das so, hier die tabelle wie sie jetzt aussieht wenn ich sie ausgebe:
Code: Alles auswählen
|Team|Punkte|Diff|
------------------
| A | 30 | 20 |
| B | 27 | 22 |
| C | 22 | 17 |
| D | 18 | 11 |
Und so soll Sie aussehen:
Code: Alles auswählen
|Platz|Team|Punkte|Diff|
------------------------
| 1 | A | 30 | 20 |
| 2 | B | 27 | 22 |
| 3 | C | 22 | 17 |
| 4 | D | 18 | 11 |
Das Script soll erst nach den oben genannten Kriterien sortieren (das klappt) und dann
soll der Platz (wie oben) in eine Spalte in der DB geschrieben werden. Das in die DB schreiben
kann ich, aber wie mache ich das mit der Platzierung. Kann mir da jemand helfen ? Bitte.
Verfasst: 14.01.2003 00:34
von Condor
Hallo,
ich bins nochmal. @ PhilipK. Es ist eine MySQL-DB.
Verfasst: 14.01.2003 00:49
von PhilippK
Was für 'nen Typ haben denn die Punkte-Felder? Ich vermute fast, dass du die als Text definiert hast...
Gruß, Philipp
Verfasst: 14.01.2003 01:19
von Condor
Hallo,
du hast vollkomen recht. Ich hatte die Spalte als VARCHAR. Da wäre ich nie draufgekommen. Vielen Vielen Dank. Und ich sitze da rum und fummle am script und dann liegt es an der DB. Dumm, dumm, dumm.
Danke nochmals.