snoot: Script sortiert Zahlen teilweise falsch

Hi,

ich spiele gerade mit dem dem tablesorter-Script (Download) und prinzipiell klappt das auch. Komischerweise werden einige Spalten aber falsch sortiert.

Das heißt, dass in diesen Spalten die Ziffer 9 größer als die Ziffer 1 ist, egal ob die Zahl 1, 10 oder 100 ist. 9 wird als größer eingestuft.

Meine Tabelle ist hier zu sehen. Wenn ich mich nicht verguckt habe, sortiert nur die Spalte 'schreiben' korrekt, alle anderen nicht. Das ist auch unabhängig davon, ob ich die Zahlen mit Komma ausgeben lasse oder mit einer Einheit (€, GB, ...). In der Datanbank (MySQL 5.0.32) sind die Spalten mit Zahlen alle identisch. Typ Decimal(), keine Attribute etc. Die Zahlen sind alle Punkt-getrennt und haben keine führenden Nullen.

Struktur der DB

Tabelle

Was kann da denn falsch sein? Ich habe bereits mehrere Versionen der beiden Scripte getestet, aber überall der gleiche Fehler. Sortiere ich im phpMyAdmin-Interface wird korrekt sortiert.

  1. Hi,

    Das heißt, dass in diesen Spalten die Ziffer 9 größer als die Ziffer 1 ist, egal ob die Zahl 1, 10 oder 100 ist. 9 wird als größer eingestuft.

    Dann vergleichst du keine Zahlen, sondern Zeichenketten - in diesen ist "9" grösser als "1", weil es weiter hinten in der Zeichentabelle steht.

    In der Datanbank (MySQL 5.0.32) sind die Spalten mit Zahlen alle identisch. Typ Decimal(), keine Attribute etc.

    Der MySQL-Datentyp interessiert JavaScript überhaupt nicht, es kennt ihn ja nicht mal.

    Was kann da denn falsch sein?

    Das übliche - absolut kein neues Thema.

    Wenn du per JavaScript ermittelte Zeichenketten wie Zahlen behandelt haben willst - dann musst du sie erst in solche umwandeln; Stichworte parseFloat/parseInt.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Wenn du per JavaScript ermittelte Zeichenketten wie Zahlen behandelt haben willst - dann musst du sie erst in solche umwandeln; Stichworte parseFloat/parseInt.

      Laut der Seite sollten die Tabelleninhalte aber selbständig erkannt werden, die dortigen Beispiele sortieren ja auch korrekt - mit den gleichen js-Dateien.

      - Parsers for sorting text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats), time

      Außerdem erklärt das ja auch nicht, wieso es in einer Spalte klappt und in allen anderen nicht.

  2. Hallo snoot,

    villeicht solltest du auch die metadata.js einbinden.

    Dann kannst du in den TH-Elementen der Klasse "header" deiner Tabelle  explizit angeben, ob es sich hier um eine alphabetische, numerische oder auch z.B. eine Sortierung nacht einem bestimmten Datumsformat handeln soll.

    http://tablesorter.com/docs/example-meta-parsers.html

    Gruß Gernot

    1. Hallo snoot,

      villeicht solltest du auch die metadata.js einbinden.

      Aja, das klingt gut.

      Leider etwas karg dokumentiert. Wie finde ich denn raus, was es noch für Typen gibt außer 'text' und 'procent'?

      Außerdem scheint das vom Autor selbst definiertes zu sein, anderfalls würde es ja denke ich 'percent' heißen!? Aber ich finde in keiner der eingebundenen Dateien einen Hiwneis darauf.

      Wenn ich meine Spalten jedenfalls alle mit 'procent' definiere, dann wird neben der 'schreiben'-Spalte auch die letzt Spalte (MB/s/€) korrekt sortiert.

      Gibt's doch gar nicht ...

      1. Wenn ich meine Spalten jedenfalls alle mit 'procent' definiere, dann wird neben der 'schreiben'-Spalte auch die letzt Spalte (MB/s/€) korrekt sortiert.

        Ne, stimmt gar nicht - ist auch noch falsch :(

        1. Hallo snoot,

          »» Wenn ich meine Spalten jedenfalls alle mit 'procent' definiere, dann wird neben der 'schreiben'-Spalte auch die letzt Spalte (MB/s/€) korrekt sortiert.

          Ne, stimmt gar nicht - ist auch noch falsch :(

          Probier es auch mal mit "digit"

          Gruß Gernot

          1. Probier es auch mal mit "digit"

            Danke, aber ich hab eine andere Lösung gefunden: http://forum.de.selfhtml.org/my/?t=188298&m=1253131&readmode=thread

            Da scheint 'digit' aber auch zu funktioneren.

  3. Okay,

    hab die richtige Syntax gefunden:

    		<script type="text/javascript" id="js">  
    		$(document).ready(function()  
    		{  
    			$("table").tablesorter(headers: { 1: { sorter: 'currency' });  
    		});  
    		</script>
    ~~~bei 'headers' kann man die Format einstellen. Trotzdem komisch, dass es in einer Spalte so funktioniert hat.  
      
      
    Interessant wäre noch, was es hier neben 'currency' für Werte gibt. 'numeric' geht nicht. 'currency' klappt zwar überall, aber ist ja eigentlich bei den meisten Spalten falsch.  
      
      
      
    Danke für die Hilfe :)
    
    1. Hallo,

      Interessant wäre noch, was es hier neben 'currency' für Werte gibt.

      Probier mal digit.

      Gruß
      Olaf