Announcement

Collapse
No announcement yet.

sortierte Ausgabe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • sortierte Ausgabe

    Hallo,

    kann man in MSSQL/mySQL Folgendes bewerkstelligen?

    Gegeben sei eine Tabelle

    id | text
    -----------
    1 | hallo
    2 | welt
    3 | geht
    4 | es
    5 | Dir
    6 | gut
    7 | der

    In der Applikation werden nun ein nach einen speziellen Kriterium id's in einer bestimmten Reihenfolge bestimmt:

    z.B. 4 3 7 2 6.

    Habe ich eine Chance ohne Stored procedure und ohne (temp.) Tabelle geht per SQL-Abfrage die Ausgabe

    es
    geht
    der
    Welt
    gut

    zu bekommen?

    Also in etwa. SELECT text from tabelle WHERE id = 4 OR id=3 ... ORDER BY ???


    Danke, mssqler

  • #2
    Hallo,

    zB mit
    [highlight=sql]
    SELECT text FROM #tmp WHERE ID = 4
    UNION ALL
    SELECT text FROM #tmp WHERE ID = 3
    UNION ALL
    SELECT text FROM #tmp WHERE ID = 7
    UNION ALL
    SELECT text FROM #tmp WHERE ID = 2
    UNION ALL
    SELECT text FROM #tmp WHERE ID = 6
    [/highlight]

    // Edit: Wichtig ist UNION ALL da sonst das Ergebnis manipuliert wird und nicht der gewünschten Reihenfolge entspricht.

    mfG Gü

    PS: Die Ausgabe bezweifle ich allerdings
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Danke. Ist zwar aufwendig, d.h. ich würde mir eine kompaktere Syntax wünschen, aber die Applikation kann die Query ja zusammenbauen.

      Comment


      • #4
        Mir ist keine Syntax bekannt in der der Datenbank-Server das Ergebnis nicht anderwertig beeinfluss (sortiert, etc)

        Wie du erwähnt hast kann das Stament ja zusammengebaut werden.
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Originally posted by gfoidl View Post
          ...

          // Edit: Wichtig ist UNION ALL da sonst das Ergebnis manipuliert wird und nicht der gewünschten Reihenfolge entspricht...
          Ohne Angabe eines ORDER BY ist die Reihenfolge der Ergebnisdatensätze einer Abfrage in jedem Fall "undefiniert". Auch wenn bei 100 Versuchen immer das gewünschte Ergebnis rauskommt, kannst du dich nicht definitv darauf verlassen.
          Wenn das Statement also schon dynamisch mit UNION zusammengebaut wird, dann kann man auch gleich die Sortierung mit angeben:
          [highlight=sql]
          SELECT 1 sort, text FROM #tmp WHERE ID = 4
          UNION ALL
          SELECT 2 sort, text FROM #tmp WHERE ID = 3
          UNION ALL
          SELECT 3 sort, text FROM #tmp WHERE ID = 7
          UNION ALL
          SELECT 4 sort, text FROM #tmp WHERE ID = 2
          UNION ALL
          SELECT 5 sort, text FROM #tmp WHERE ID = 6
          ORDER BY 1;
          [/highlight]

          Gruß Falk
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo,

            folgende Möglichkeit gibt es auch noch:

            Select t1.text,t2.text,t3.text,t4.text.t5.text from tabelle t1,tabelle t2,tabelle t3, tabelle t4,
            tabelle t5
            where t1.id=4 and t2.id=3 and t3.id=7 and t4.id=2 and t5.id=6

            Dann hast Du alles in einer Abfrage und ohne Zahlen dazwischen.

            Gruß
            docendo discimus

            Comment

            Working...
            X