Zahlen richtig sortieren

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Zahlen richtig sortieren

Beitrag 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 ?
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Was hast du denn für 'ne Tabelle???

Gruß, Philipp
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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 ?
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag 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
Benutzeravatar
itst
Ehrenadmin
Beiträge: 7418
Registriert: 21.08.2001 02:00
Wohnort: Büttelborn bei Darmstadt
Kontaktdaten:

Beitrag 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).
Sascha A. Carlin,
phpBB.de Ehrenadministrator
:o
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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");
?>
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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.
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag von Condor »

Hallo,
ich bins nochmal. @ PhilipK. Es ist eine MySQL-DB.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Was für 'nen Typ haben denn die Punkte-Felder? Ich vermute fast, dass du die als Text definiert hast...

Gruß, Philipp
Condor
Mitglied
Beiträge: 221
Registriert: 27.02.2002 01:00
Wohnort: Ahlen

Beitrag 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.
Antworten

Zurück zu „Coding & Technik“