Knud: (MySQL) Wie sortiere ich das am besten?

Hi,

ich hab eine Tabelle mit IP-Adressen nach denen ich die Liste auch gerne sortieren möchte.

Das Problem ist nur, dass ich das Feld als char definieren musste und nun die 10.1.10.13 vor der 10.1.10.2 angezeigt wird.
Genauso leider natürlich auch 10.1.13.2 vor der 10.1.2.2.

Wie kann ich das denn am sinvollsten verhindern?

Muss ich so ein kompliziertes order by substr,substr,substr,substr machen? (Ihr wisst was ich meine?)

Gruß,

Knud

  1. Hi,

    Muss ich so ein kompliziertes order by substr,substr,substr,substr machen? (Ihr wisst was ich meine?)

    wieso kompliziert. ich denke mal das geht am schnellsten.

    gruß.
    roger.

    1. Hi,

      wieso kompliziert. ich denke mal das geht am schnellsten.

      ich find so was schon recht kompliziert:

      $abfrage .= " order by substring(substring_index(ipadresse,'.',1),0,2), substring(substring_index(ipadresse,'.',-2),0,2), substring(substring_index(ipadresse,'.',-2),0,2), substring(substring_index(ipadresse,'.',-1),0,2),abteilung";

      vorallem weil er das noch nicht sooo richtig sortiert.

      da kommt bei mir sowas raus:

      10.1.41.15
      10.1.6.1
      10.1.6.2
      10.1.6.3
      10.1.1.1
      10.1.1.2
      10.1.1.3
      10.1.8.2
      10.1.8.3
      10.1.3.10
      10.1.3.11
      10.1.3.12

      das ist zwar schon 50% von dem was ich wollte, aber noch nicht so ganz.

      Könnte das sein, dass ich immer zwei Stellen nehme ich aber die Punkte dann ab und zu drin hab?

      Gruß,

      Knud

      1. Hallo,

        $abfrage .= " order by substring(substring_index(ipadresse,'.',1),0,2), substring(substring_index(ipadresse,'.',-2),0,2), substring(substring_index(ipadresse,'.',-2),0,2), substring(substring_index(ipadresse,'.',-1),0,2),abteilung";

        Was machst Du da? Schau Dir
        SUBSTRING_INDEX(zeichenkette,begrenzer,zaehler)
        nochmal genau an.
        http://www.mysql.de/doc/de/String_functions.html

        viele Grüße

        Axel

        1. Hi,

          Was machst Du da? Schau Dir
          SUBSTRING_INDEX(zeichenkette,begrenzer,zaehler)
          nochmal genau an.
          http://www.mysql.de/doc/de/String_functions.html

          ich denke, das richtige (hoffe ich doch), jedenfalls hatte ich so die einzelnen "Felder" erhalten, als ich die ins selekt genommen hatte:

          $abfrage .= " order by REPLACE(left(ipadresse,2),'.',''),
          REPLACE(substring(substring_index(ipadresse,'.',-3),1,2),'.',''),
          REPLACE(substring(substring_index(ipadresse,'.',-2),1,2),'.',''),
          REPLACE(right(ipadresse,2),'.',''),abteilung";

          Aber jetzt interpretiert der wohl wieder alles als String.
          Habe jetzt zwar die Liste beginnend mit
          10.1.1.1 + folgend
          aber dann folgt wieder die Gruppe
          10.1.10.1

          Das Problem ist wohl jetzt nur noch die String-Interpretation. Also hab ich überall noch ein '* 1' drangehangen und siehe da,

          es läuft jetzt.

          Und das ist die Hauptsache, oder?

          Wenn Du allerdings noch ne einfachere (schnellere) Methode weisst, ich würd mich freuen.

          Gruß,

          Knud

          1. Hallo,

            ich denke, das richtige (hoffe ich doch), jedenfalls hatte ich so die einzelnen "Felder" erhalten, als ich die ins selekt genommen hatte:

            $abfrage .= " order by REPLACE(left(ipadresse,2),'.',''),
            REPLACE(substring(substring_index(ipadresse,'.',-3),1,2),'.',''),
            REPLACE(substring(substring_index(ipadresse,'.',-2),1,2),'.',''),
            REPLACE(right(ipadresse,2),'.',''),abteilung";

            Hm, und wenn ipadresse="192.168.120.2"

            ipadresse = "10.0.1.2" oder
            ipadresse = "192.168.120.2"

            t1 = substring_index(ipadresse,'.',1)
            t2 = substring_index(substring_index(ipadresse,'.',2),'.',-1)
            t3 = substring_index(substring_index(ipadresse,'.',3),'.',-1)
            t4 = substring_index(ipadresse,'.',-1)

            order by
            substring_index(ipadresse,'.',1)*1,
            substring_index(substring_index(ipadresse,'.',2),'.',-1)*1,
            substring_index(substring_index(ipadresse,'.',3),'.',-1)*1,
            substring_index(ipadresse,'.',-1)*1

            viele Grüße

            Axel

  2. Muss ich so ein kompliziertes order by substr,substr,substr,substr machen? (Ihr wisst was ich meine?)

    jo!

    viel spass :)

    sky.