Ankündigung

Einklappen
Keine Ankündigung bisher.

Sortierung von Datenbankinhalten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sortierung von Datenbankinhalten

    Hallo zusammen,

    es geht um die Sortierung einer Spalte in einer MySQL-Datenbank des Typs Text mit Inhalten, die wie folgt aussehen:

    DN 15
    DN 25
    DN 40
    DN 50
    DN 100
    DN 200

    In dieser Reihenfolge sollte es eigentlich sortiert sein, leider sortiert er die Spalte aber bei angabe von ORDER BY nennweite ASC so:

    DN 100
    DN 15
    DN 200
    DN 25
    DN 40
    DN 50

    Mir ist klar, warum er das macht, aber noch nicht ganz wie ich das verhindern/ändern kann.
    Ich hatte mir schon überlegt "DN " vorne abzuschneiden und den Rest als Typ INT in die Datenbank zu speichern.
    Leider sehen nicht alle Datensatze so aus, weshalb der Typ Text undbedingt bleiben muss.

    Meine erste Idee war die Eingabe mit regulären Ausdrücken zu bearbeiten, damit ich z.B. aus "DN 15" --> "DN 015" mache, wodurch dann ja wieder richtig sortiert werden würde.
    Dann müsste ich eben bei der Ausgabe die Null wieder wegnehmen.

    Meine Frage ist jetzt eigentlich nur:
    Ist das so die beste und richtige Methode?
    Oder denke ich zu umständlich und es lässt sich viel einfacher lösen?
    Wenn ja wie? (Brauche nur einen Denkanstoß)

    Ich hoffe ich habe mich verständlich ausgedrückt.

    Vielen Dank schonmal im Voraus.

    Grüße
    Ramona
    Am Ende wird alles gut!
    Wenn es nicht gut ist, ist es noch nicht das Ende.


  • #2
    Hallo.

    Nein du musst nicht beim Typ Text bleiben. Werden die Daten in ein Textformularfeld eingegeben?

    Wenn ja dann trenne beim eintragen den Post String einfach mit explode auf und trage die Werte in die zwei Felder ein. Eines was den Textstring DN oder was auch immer enthält und eines was den Zahlenwert enthält.

    Dann beim auslesen sortierst du mit Order By intspalte ASC und setzt bei der Ausgabe einfach den dazu enthaltenen Text davor und schon müsste das hin hauen.
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

    Kommentar


    • #3
      Zitat von litterauspirna Beitrag anzeigen
      Nein du musst nicht beim Typ Text bleiben.
      Hallo litter,

      ich hätte es vielleicht nochmal genau an Beispielen erläutern sollen...
      Außer der Form z.B. "DN 15" kann in derselben Spalte auch noch z.B. so etwas stehen: 2 1/2" (" steht für Zoll) je nachdem, ob es eine Ausführung nach DIN oder ANSI ist.
      Deshalb denke ich müsste ich doch beim Typ TEXT bleiben, oder?

      Dank schonmal.

      Ramona
      Am Ende wird alles gut!
      Wenn es nicht gut ist, ist es noch nicht das Ende.

      Kommentar


      • #4
        Nein auch dann nicht,aber du musst dann bei der Ausgabe etwas bearbeiten.

        Du müsstest zum Beispiel wenn du diese Angabe eintragen willst das so machen.

        Anstatt 1/2 schreibe 05 rein,dann wird das als int gewertet und du kannst sortieren. Nache der Sortierung musst du dann die Ausgabe so formatieren wie du es brauchst. Ich kenne nun nein Projekt und Auftragslage nicht,aber das wäre ein Ansatz,kann sein das es einfache rund eleganter geht,aber so würde ich das machen.
        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
        http://www.lit-web.de

        Kommentar


        • #5
          was auch geht, speicher die werte wie gehabt als text, füge aber noch 2 spalten in der tabelle hinzu, mit z.b "norm" und "werte", in das eine schreibst du strings, din, ansi oder was auch immer und in werte den entsprechenden dazugehörigen wert. damit kannst du dann auch intern rechnen.

          gruss void

          Kommentar


          • #6
            Zitat von void Beitrag anzeigen
            was auch geht, speicher die werte wie gehabt als text, füge aber noch 2 spalten in der tabelle hinzu, mit z.b "norm" und "werte", in das eine schreibst du strings, din, ansi oder was auch immer und in werte den entsprechenden dazugehörigen wert. damit kannst du dann auch intern rechnen.

            gruss void
            Und das geht mit meiner Variante nicht? Nichts anderes habe ich geschrieben.
            Wozu aber bitte die Werte weiter als Text speichern und extra 2 Felder? Das ist m.A.n Sinnlos.
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            http://www.lit-web.de

            Kommentar


            • #7
              ?

              Zitat von litterauspirna Beitrag anzeigen
              Und das geht mit meiner Variante nicht? Nichts anderes habe ich geschrieben.
              Wozu aber bitte die Werte weiter als Text speichern und extra 2 Felder? Das ist m.A.n Sinnlos.
              warum so agressiv ? ich sagte wenn "mann/frau" es braucht, "kann" man es sowohl so oder so speichern oder tabellen erweitern etc..ob es einen sinn hat, kann nur der programmierer entscheiden und erzähl jetzt nicht, das es nicht viele wege nach rom gibt beim koden. ich habe deine variante nicht kritisiert, wohl nur überflogen und damit nicht richtig gewürdigt. tut mir leid
              void()

              Kommentar


              • #8
                Um Himmels Willen void ich bin nicht aggressiv,nicht hier. Nein wenn es so rüber kam dann entschuldige war nicht meine Absicht. Beim coden gibt es natürlich viele Wege die zum Ziel führen (was will ich zum Teufel in Rom ).

                Nein letztenendes kommt sie um gewisse Formatierungen etc. sowieso nicht drum rum, bei dem was sie vorhat. Weil mit einem solchen Wert 1/2 kann man nun mal nicht sortieren sinnvoll. Also muss man sichenen Weg schaffen es zu einem Wert zu formatieren mit dem man sinnvoll sortieren kann und bei der Ausgabe dann kann man das wieder rückformatieren zu dem Wert wie er ausgegben und angezeigt werden soll. Um diese Sache kommt sich rum, nicht bei ihrem beschrieben Problem.

                Ich sagte deshalb das deine Variante Sinnlos ist das eine Feld als Text beizubehalten und zwei zusätzliche Felder anzulegen, weil in das eine Feld trägt sie den Datensatz so ein, aber sie muss trotzdem auflösen um am Ende vernüftig nach int Werten sortieren zu können. Also deshalb gleich zwei Felder, dann den String aus dem Postfeld auflösen und in das eine Feld was nicht für die Sortierung zuständig ist den Texteil reinschreiben und in den anderen Teil des Strings den formatierten oder gewandelten int Wert rein schreiben.

                Hoffe das ist jetzt besser und weniger aggressiv beschrieben.

                Außerdem was erlauben du dir, meinen Post nicht zu würdigen so eine Frechheit aber auch . Nimms locker alles nur Spaß.

                mfg der litter
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                http://www.lit-web.de

                Kommentar


                • #9
                  Wenn ich das Richtig verstanden habe, handelt es sich bei diesen "DN ??" oder "ANSI ??" um irgendwelche Bauteile oder ähnliches mit bestimmten Kenngrößen! Daher würde ich das ganze in zwei Spalten in einer Tabelle ablegen: 1. Name (String), 2. Größe (Float)

                  Damit kann man die Einträge anhand von Größe sortieren, sodass sogar Angaben in Zentimeter und Zoll sinnvoll sortiert werden. Zum Eintragen muss man lediglich den Zahlenwert in irgendeiner Weise extrahieren und in eine einheitliche Einheit umrechnen. Umrechnungen in verschiedene Einheiten sind bei der Ausgabe ebenfalls möglich.

                  Kommentar

                  Lädt...
                  X