peter: vorgegebenes Order by (nicht asc, desc)

Hi,

kann man es bei der Sortierung "order by" irgendwie hinbekommen, eine vorgegebene Reihenfolge einzuhalten.

z.B.

Muster-Tabelle:
text   |   id
--------------
egal   |   1
bla    |   2
jaja   |   1
blub   |   3

wenn ich hier wollte das alle Sätze in der Reihenfolge (Id) 2, 3, 1 ausgegeben werden:

Muster-Ausgabe:
bla   2
blub  3
egal  1
jaja  1

geht sowas ohne in der Select-Anweisung eine Dummy-Spalte mit auszugeben?

Hintergrund: meine Id ist eine Status-Nr., die vom System vorgegeben ist - ich möchte das bestimmte Stati an erster, zweiter, dritter, usw. Stelle stehen.

Danke schon mal
Peter

  1. hi,

    wenn ich hier wollte das alle Sätze in der Reihenfolge (Id) 2, 3, 1 ausgegeben werden: [...]
    geht sowas ohne in der Select-Anweisung eine Dummy-Spalte mit auszugeben?

    Du könntest dir einen "Spaltenwert" so zusammenbasteln, dass er für 2 den Wert 2, für 3 den Wert 1 und für 1 den Wert 0 annimmt - und dann danach sortieren.
    In MySQL z.B. mit den Control Flow Functions.

    Hintergrund: meine Id ist eine Status-Nr., die vom System vorgegeben ist

    Wer hat ihr dann die Bezeichnung Id gegeben?
    Derjenige muss wohl zu lange in der Sonne gesessen haben.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hola,

      Du könntest dir einen "Spaltenwert" so zusammenbasteln, dass er für 2 den Wert 2, für 3 den Wert 1 und für 1 den Wert 0 annimmt - und dann danach sortieren.
      In MySQL z.B. mit den Control Flow Functions.

      das meinte ich mit Dummy-Spalte...

      Wer hat ihr dann die Bezeichnung Id gegeben?
      Derjenige muss wohl zu lange in der Sonne gesessen haben.

      ey, nichts gegen unsere DB-Admins ;) die Spalte heisst StatusId, ich hatte nur beim schreiben der Mustertabelle noch nicht im Kopf das mit dem Status als Hintergrund zu erwähnen...die andere Spalte heisst ja auch nicht Text ;)

      also gibt es keine andere Möglichkeit als über eine weite Spalte zu gehen? Ich habe das Ergebnis der Datenbank nach der Abfrage in einem Recordset und kann hier auch mit rs.Sort abgehen - kann man da was machen?

      Peter

      1. hi,

        also gibt es keine andere Möglichkeit als über eine weite Spalte zu gehen?

        SQL-seitig sehe ich keine.

        Ich habe das Ergebnis der Datenbank nach der Abfrage in einem Recordset und kann hier auch mit rs.Sort abgehen - kann man da was machen?

        Ich weiß nicht, was rs.Sort für eine Sprache ist - aber wenn es da sowas wie usort in anderen Sprachen gibt, wo man eine selbstdefinierte Vergleichsfunktion benutzen kann, ginge es so natürlich auch.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. hi,

          Ich weiß nicht, was rs.Sort für eine Sprache ist - aber wenn es da sowas wie usort in anderen Sprachen gibt, wo man eine selbstdefinierte Vergleichsfunktion benutzen kann, ginge es so natürlich auch.

          rs.Sort ist ein Standard-Befehl auf ein Recordset (ADODB-Recordset in VBScript)

          usort kenne ich nicht, aber dann mache ich halt eine weite Spalte in meinem internen rs, wonach ich sortiere...dachte nur ggf. gibts da was in SQL was ich nicht kenne.

          Trotzdem Danke
          Peter

          1. Servus,

            und warum muss es 2-3-1 sein, warum nicht 3-1-2 oder 1-3-2? Auf den zweiten Blick sieht es aus, als würdest du nach der Spalte "text" sortieren (alphabetisch aufsteigend).

            Wie du gemerkt hast, kannst du deine StatusId Spalte nicht für deine Sortierung heranziehen. Also finde den Grund warum die Reihenfolge 2-3-1 oder wie auch immer sein soll, dann weisst du wonach du sortieren sollst.

            Cheers,
            Frank

            1. hola,

              Wie du gemerkt hast, kannst du deine StatusId Spalte nicht für deine Sortierung heranziehen. Also finde den Grund warum die Reihenfolge 2-3-1 oder wie auch immer sein soll, dann weisst du wonach du sortieren sollst.

              nene...das war nur als Beispiel gedacht, die Reihenfolge möchte ich ja bestimmen können - hab es jetzt mit einer Weiteren Spalte gemacht, die ich beim Select-Befehl mit Case-Bla anfüge und danach sortiere.

              Trotzdem danke
              Peter

              1. Hallo,
                eine weitere Möglichkeit, die aber Performance Technisch nicht optimal ist, besteht darin verschiedene Abfragen zu machen und diese mit UNION zu verbinden. Also

                SELECT xyz FROM table WHERE ID=2 UNION SELECT xyz FROM table WHERE ID=1 [...]

                Ob das die Datenbank dann schnell und effizient umsetzen kann weiß ich nicht.

                Jahresendflügelfigur

                hola,

                Wie du gemerkt hast, kannst du deine StatusId Spalte nicht für deine Sortierung heranziehen. Also finde den Grund warum die Reihenfolge 2-3-1 oder wie auch immer sein soll, dann weisst du wonach du sortieren sollst.

                nene...das war nur als Beispiel gedacht, die Reihenfolge möchte ich ja bestimmen können - hab es jetzt mit einer Weiteren Spalte gemacht, die ich beim Select-Befehl mit Case-Bla anfüge und danach sortiere.

                Trotzdem danke
                Peter