Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL: Mehrere Spalten als eine Resultspalte selektieren und sortieren nach Buchstabe

Einklappen

Neue Werbung 2019

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

  • SQL: Mehrere Spalten als eine Resultspalte selektieren und sortieren nach Buchstabe

    Hey,

    folgendes Problem:

    Ich hab mehrere Spalten `id`,`a`,`b`,`c`,... und würde diese gerne alle als eine Resultspalte `result` selektieren.

    In den Spalten `a`,`b`... sind Strings (z.b.: `a`='Hallo',`b`='Ciao') gespeichert die nach ihrem Anfangsbuchstaben sortiert werden sollen -> ORDER BY `result` ASC.

    Folgendes klappt:

    Code:
    SELECT `a`
    FROM `table`
    WHERE `id`=1
    UNION ALL SELECT `b`
    FROM `table`
    WHERE `id`=1
    ORDER BY `a`
    Result:

    Code:
    a
    Hallo
    Ciao
    Das würde aber bedeuten, dass mein Query mit all den "UNION ALL"`s ziemlich lang wird (hab insgesamt 10 spalten mit strings).

    Gibts da ne andere Möglichkeit?


  • #2
    Sorry, aber da ist einfach Dein DB-Design Murx.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Leider hab ich keine andere Möglichkeit. Soll ich deinem Post entnehmen dass es keine andere Art gibt, ein solches Resultat zu erzielen?

      Kommentar


      • #4
        Leider hab ich keine andere Möglichkeit
        Was soll das heißen?
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Das heißt, dass ich, wenn ich könnte, selbstverständlich die Tabellenstruktur ändern würde. Allerdings ist die Problematik so gegeben, wie ich sie in meinem ersten Post erläutert habe.

          Ich habe ein Tabelle mit mehreren tausend `id`s die für eben diese `id`s 10 verschiedene Strings speichern kann. Ich kann die nicht alle in eine column packen, da das viel größere Probleme erzeugen würde.

          Die Tablestructure ist fix und ich wüsste nicht was ich daran verändern kann.

          Von daher (für den Fall, dass du mir keine bessere Struktur nennen kannst) möchte ich gerne zurück auf meine Ausgangsfrage kommen.

          Gibt es bessere Möglichkeiten?

          Kommentar


          • #6
            Ich kann die nicht alle in eine column packen, da das viel größere Probleme erzeugen würde.
            Was auch immer das heißt. Bei solchen Aussagen kann man ja nichts konkretes vorschlagen.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Ok. Kriegst den Award für die klugsten Bemerkungen.

              Als Mod weiß man doch - falls man nix beitragen kann... [usw.].

              Nur ne ganz kurze Zwischenfragen noch. Wenn ich gar nicht erst mit dieser Struktur umgehen müsste, sondern frei wählen und das ganze anders aufziehen könnte, würde ich dann hier fragen... würde es dann überhaupt Sinn machen, ein Forum verfügbar zu machen indem nach solch speziellen Lösungen gefragt und über diese gedacht werden kann? Vorsicht, rethorische Frage.


              Nochmal, die Problematik.

              Ich habe eine Reihe von IDs und für all diese IDs sollen 10 Strings abgespeichert werden die ich für jede ID abgreifen kann. Hinzu kommt, dass die 10 Strings in der selben Row der ID sein müssen. Das sind die festen Randbedinungen, an denen ich nichts ändern kann.

              2. Möglichkeiten die mir kamen:

              1.
              Eine Spalte neben `id`, z.B. `strings` in der alle 10 "Unterstrings" reingeworfen werden.

              --> Geht leider nicht, da es mir vom Programm her nicht möglich ist diese dann im Nachhinein alph. zu sortieren. Sonst wäre das mögl. gewesen (vll. gehts ja mit ner mySQL Funk. schnell und einfach?).


              2.
              Die 10 strings in 10 seperate Spalten aufteilen und es schaffen diese irgendwie sortiert zu grabben.


              Wenn du noch irgendwelche Fragen bezügl. des setups hast, dann stell sie doch einfach...

              Kommentar


              • #8
                Hab ich doch. Was das Problem hieran wäre, möchte ich wissen:
                Ich kann die nicht alle in eine column packen, da das viel größere Probleme erzeugen würde.
                Multiple Daten gehören in die Zeile, nicht in die Spalte, so ist das nunmal in relationalen Datenbanken.

                Code:
                ID | value
                1    Feld_A
                1    Feld_B
                1    Feld_C
                2    Feld_A
                2    Feld_C
                Nur weil Deine Datenstruktur sch... ist, brauchst Du mich nicht als Klugscheißer zu bezeichnen.

                würde es dann überhaupt Sinn machen, ein Forum verfügbar zu machen
                Es gibt genügend Fragen, auch zu vernünftigen Datenstrukturen. Zudem weiß man nie hier, ob der User

                - weiß, wies besser geht
                - nur behauptet, er könne/dürfe die Struktur nicht ändern

                Dein Posting konnte und kann beides nicht ausschließen lassen.
                --

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  Zitat von juice122 Beitrag anzeigen
                  Folgendes klappt:

                  Code:
                  SELECT `a`
                  FROM `table`
                  WHERE `id`=1
                  UNION ALL SELECT `b`
                  FROM `table`
                  WHERE `id`=1
                  ORDER BY `a`
                  Das würde aber bedeuten, dass mein Query mit all den "UNION ALL"`s ziemlich lang wird (hab insgesamt 10 spalten mit strings).

                  Gibts da ne andere Möglichkeit?
                  Nein, ich glaube es gibt keine einfachere Möglichkeit, als mehrere UNION ALL hintereinander zu setzen. Das ist auch nicht weiter schlimm, wenn eine SQL-Abfrage mal länger ist. Entscheidend ist, ob MySQL die Query auch schnell/performant ausführen kann. Das wäre dann zu testen (siehe EXPLAIN).

                  Alternativ gäbe es noch die Möglichkeit eine Temporäre Tabelle (TT) entsprechend Deiner Result-Anforderungen zu erzeugen und die dann mit Hilfe einer eigenen Stored Procedure zu füllen und das Ergebnis der TT dann ausgeben.

                  Code:
                  CALL sp_build_temp_table();  
                  
                  SELECT result_spalte FROM temp_table
                  ORDER BY result_spalte
                  Grüße
                  Thomas

                  Kommentar


                  • #10
                    Zitat von nikosch Beitrag anzeigen
                    Multiple Daten gehören in die Zeile, nicht in die Spalte, so ist das nunmal in relationalen Datenbanken.
                    Column = Spalte, row = Zeile. Ich kann sowohl 10 strings gebündelt in ein char field hauen und dann vom Programm splitten und sortieren lassen (wollte aber gleich anmerken, dass mir das nicht möglich ist), als 10 strings auf verschiedene columns zu verteilen. Falls es noch eine weitere Möglichkeit gibt, die ich in der Tat nicht kenne, dann lass sie mich doch wissen.

                    Meine Struktur entspricht deinem Code:

                    Code:
                    ID | value
                    1    Feld_A
                    1    Feld_B
                    1    Feld_C
                    2    Feld_A
                    2    Feld_C


                    Sorry falls dies deinen Anforderungen einer vernünftigen Datenstruktur nicht entspricht, aber da du mir bis jetzt keinen anderen Vorschlag aufgeschrieben hast, denk ich du hast auch keine bessere Idee (obiges entspricht ja meiner Struktur in etwa).

                    Dein Posting konnte und kann beides nicht ausschließen lassen.
                    Genau, deswegen widersprichst du mir und schreibst danach ne identische Struktur hin.

                    Zitat von thomas_w Beitrag anzeigen
                    Alternativ gäbe es noch die Möglichkeit eine Temporäre Tabelle (TT)
                    Vielen Dank, das werde ich mal ausprobieren. Das einzige Problem mit der größeren Abfrage ist für mich, dass es etw. unübersichtlich wird - aber das wäre ja OK, wenn die Laufzeiten stimmen .

                    Nochmal Danke und Gruß.

                    Kommentar


                    • #11
                      Column = Spalte, row = Zeile. Ich kann sowohl 10 strings gebündelt in ein char field hauen
                      wäre dann

                      Code:
                      ID | Felder
                      1    Feld_A Feld_B Feld_C
                      2    Feld_A Feld_C
                      und dann vom Programm splitten und sortieren lassen (wollte aber gleich anmerken, dass mir das nicht möglich ist), als 10 strings auf verschiedene columns zu verteilen.
                      wäre dann

                      Code:
                      ID | a      | b      | c 
                      1    Feld_A   Feld_B   Feld_C
                      2    Feld_A            Feld_C
                      Meine Struktur entspricht deinem Code:
                      Stimmt doch nicht. Du redest von
                      Ich hab mehrere Spalten `id`,`a`,`b`,`c`,
                      also Variante 2.
                      Ich rede von
                      Code:
                      ID | value
                      1    Feld_A
                      1    Feld_B
                      1    Feld_C
                      2    Feld_A
                      2    Feld_C
                      aber da du mir bis jetzt keinen anderen Vorschlag aufgeschrieben hast
                      Ergo habe ich das doch.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Jetzt seh ich den Unterschied, danke.

                        Muss mal überlegen ob das klappt, bis jetzt war `id` primary key... ich werds mal durchgehen.

                        Kommentar

                        Lädt...
                        X