Announcement

Collapse
No announcement yet.

Fehlende Zeilen nach GROUP_CONCAT()

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

  • Fehlende Zeilen nach GROUP_CONCAT()

    Hi,
    und zwar hab ich eine Tabelle, mit mehreren Spalten. Mein Ziel war es das ich die Werte die in der Spalte2 auftauchen jeweils zu einem zusammenfasse.

    Also von:
    Spalte 1 ---- Spalte 2
    1 ----------- wert1
    1 ----------- wert2
    2 ----------- wert3
    2 ----------- wert4

    zu dem:
    Spalte 1 ---- Spalte 2
    1 ----------- wert1,wert2
    2 ----------- wert3,wert4

    Das hat auch funktioniert und zwar habe ich dort die Funktion GROUP_CONCAT() verwendet.
    Das Problem was jedoch jetzt ansteht ist das die Zeilen Welche keine Werte in Spalte 2 besitzen nicht mit angezeigt werden.
    Wie könnte ich das denn lösen?

    MFG

  • #2
    Definiere kein Wert in Spalte2, welchen Inhalt hat Spalte2 stattdessen?

    Grundsätzlich werden auch NULL Einträge mit ausgegeben.
    Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

    Comment


    • #3
      Ok das war vllt. ein bischen blöd formuliert.
      Im Moment sieht es grob so aus:
      SELECT p.id, p.name, p.category, GROUP_CONCAT(a.name ORDER BY a.name) AS attribute
      FROM product AS p , attribute AS a
      WHERE p.id=a.id
      GROUP BY p.id

      Und in der Datenbank attribute gibt es für manche p.id halt keine Einträge. Und genau diese fallen dann weg und werden nicht mit einem leeren Feld in Spalte 2 angezeigt.

      mfg

      Comment


      • #4
        Dann musst du mit einem OUTER JOIN statt einem INNER JOIN arbeiten, genauer bei dir LEFT JOIN

        p.s. Nutze bitte Formatierung von SQL in Beiträgen,
        Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

        Comment


        • #5
          Ach so ok...dann werd ich das gleich mal ausprobieren......
          Ja entschuldige werd ich in zukunft machen.......
          Werd dann nochmal berichten ob alles funktioniert hat.
          Thx

          Comment


          • #6
            Also ich wollt das jetzt mit dem LEFT JOIN machen aber irgendwie ist der Wurm drin.
            Jetzt Sagt er mir das er das pl.id_product in der ON-Clausel nicht kennt.
            Unknown column 'p.id_product' in 'on clause'
            [highlight=sql]
            SELECT DISTINCT pl.id_product , pl.name , cl.name AS category ,GROUP_CONCAT(al.name ORDER BY al.name) AS attribute

            FROM ps_product_lang AS pl, ps_product AS p , ps_category_product AS cp , ps_category_lang AS cl , ps_attribute_lang AS al

            LEFT JOIN ps_attribute_impact AS ai ON (pl.id_product = ai.id_product)

            WHERE pl.id_product = p.id_product AND pl.id_product = cp.id_product AND cp.id_category = cl.id_category AND ai.id_attribute = al.id_attribute

            GROUP BY pl.id_product
            [/highlight]
            Zuletzt editiert von strohk; 02.08.2011, 22:58.

            Comment


            • #7
              Würfel nicht Theta-Joins und Joins zusammen (nutze am besten gar keine Theta-Joins mehr)!

              Statt:
              [highlight=sql]
              FROM a, b
              WHERE a.id=b.id
              [/highlight]

              also:
              [highlight=sql]
              FROM a
              JOIN b
              ON a.id=b.id
              [/highlight]
              Bei SQL-Code bitte beachten: Formatierung von SQL in Beiträgen

              Comment


              • #8
                Ok hab das jetzt so gemacht und die Theta-Joins rausgelassen und es mit Joins gemacht.
                Für die es interessiert ist hier das gleiche bloß ohne Theta-Joins.
                Wenn noch etwas falsch sein sollte dann bitte noch mal schreiben....auch verbesserungen sind erwünscht .....

                [highlight=sql]
                SELECT pl.id_product , pl.name , cl.name AS category ,GROUP_CONCAT(al.name ORDER BY al.name) AS attribute

                FROM ps_product_lang AS pl

                JOIN ps_product AS p ON (pl.id_product = p.id_product)
                JOIN ps_category_product AS cp ON (pl.id_product = cp.id_product)
                JOIN ps_category_lang AS cl ON (cp.id_category = cl.id_category)
                LEFT JOIN ps_attribute_impact AS ai ON (pl.id_product = ai.id_product)
                LEFT JOIN ps_attribute_lang AS al ON (ai.id_attribute = al.id_attribute)

                GROUP BY pl.id_product
                [/highlight]

                Thx

                Comment

                Working...
                X