Announcement

Collapse
No announcement yet.

SQL Abfrage elegantere Lösung gesucht für Liste mit mehreren Sprachen

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

  • SQL Abfrage elegantere Lösung gesucht für Liste mit mehreren Sprachen

    Hallo zusammen,

    mich würde mal interessieren ob es eine elegantere Lösung für mein Problem gibt:

    Ich hole mit einer SQL Abfrage eine Liste an Prospekte aus der DB, muss nun in einer zusätzlichen Spalte alle verfügbaren Sprachen des Prospektes darstellen.

    Momentan hole ich mir die kompletten Datensätze aus der DB wo ich denke dass das unnötig ist...

    Wenn ich das Ergebnis komplett als String zurück bekommen würde wäre das auch ne brauchbare Lösung aber keine Ahnung ob das funktioniert...

    Versuche mit Subselects sind natürlich gescheitert weil das ergebnis mehrere zeilen liefert.

    Über ne bessere Methode wäre ich dankbar denn die Seite sollte perfomant sein da wir mit großen Datenmengen konfrontiert sind.

    Grüße Dirk

  • #2
    Vielleicht hilft das...

    Comment


    • #3
      HEUREKA ich habe die perfekte, elegante Lösung gefunden, das FOR XML PATH kommt auch darin vor was das allerdings bewirkt werde ich gleich noch nachlesen.

      Gefunden habe ich die Lösung über die MySQL Funktion GROUP_CONCAT(T.Tag SEPARATOR ', ') AS Tags da aber T-SQL diese Funktion nicht kennt habe ich nach einem equivalent gesucht und mit STUFF auch gefunden.

      Mein SQL (mal ein Test) sieht jetzt so aus:

      Code:
      select distinct 
      	A.pb1iname, A.pb1thumb, 
      	Sprachen=STUFF((SELECT distinct ','+pb1sprachKZ FROM tblPBserviceproduct WHERE pb1thumb=A.pb1thumb FOR XML PATH('')) , 1 , 1 , '' ) 
      from tblPBserviceproduct A
      where 
      	A.pb1iname = 'FL 0020'
      Das Ergebnis ist schlichtweg beeindrucken und exakt das nachdem ich gesucht habe und anstatt mit allen Datensätzen in allen Sprachen zu hantieren kann ich meine gewohnt schnelle Abfrage weiter benutzen.

      Das Ergebnis sieht so aus:


      FL 0020 pg_fl_0020_de_cover.jpg D,E,ES,F,RU

      Perfekt!

      Comment


      • #4
        Originally posted by SDirk View Post
        Gefunden habe ich die Lösung über die MySQL Funktion GROUP_CONCAT(T.Tag SEPARATOR ', ') AS Tags da aber T-SQL diese Funktion nicht kennt habe ich nach einem equivalent gesucht und mit STUFF auch gefunden.
        [HIGHLIGHT="SQL"]SELECT DISTINCT
        A.pb1iname
        , A.pb1thumb
        , STUFF(( SELECT DISTINCT ','+pb1sprachKZ
        FROM tblPBserviceproduct
        WHERE pb1thumb=A.pb1thumb
        FOR XML PATH('')
        ) , 1 , 1 , '' ) AS Sprachen
        FROM tblPBserviceproduct A
        WHERE A.pb1iname = 'FL 0020'[/HIGHLIGHT]
        Nun ja,
        Stuff hat damit nun mal garnix zu tun, außer das es das erste Komma durch '' ersetzt,
        die Concatenation der Strings erfolgt über FOR XML PATH ('')

        Comment

        Working...
        X