mehrere Einträge anzeigen,group_contact

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

  • mehrere Einträge anzeigen,group_contact

    Hallo @all,

    ich habe viele Tabellen, die durch m:n Beziehung zusammen hängen.
    Bei daten Ausgabe habe ich dann einige Fehler. Daten werden falsch gruppiert oder gar nicht ausgegeben.

    Hier ein Beispiel:

    Code:
    [Faktor]
    id_F|Name
    8      X
    17     Y
    
    [Faktor_S]
    id_S|id_Faktor
    1           8
    1          17
    5          17
    
    [Faktor_RG]
    id_RG|id_Faktor
    1         8
    2         8
    2        17
    3        17
    4        17
    
    
    [Faktor_EG]
    id_EG|id_Faktor
    Als Ausgabe brauch ich so eine Tabelle.

    Code:
    Faktor name | EG_name | RG_name | S_name 
    X                            1            1
    X                            2            1
    Y                            2            1;5
    Y                            3            1;5
    Y                            4            1;5
    Manchmal passiert es, dass bei Ausgaben ein Faktor komplett fehlt oder in der Spalte [S] mehr als ein Eintrag steht obwohl es nur einen gibt.

    SQL-Statement
    PHP-Code:
    Select namegroup_contact(distinct S_name Seperator ';'), EG_nameRG_name from Faktor
    Left join Faktor_S ON 
    (Faktor.id_F=Faktor_S.id_Faktor)
    Left join S ON S.id_S Faktor_S.id_S)
    für EG und RG genauso
    WHERE 
    (id_F =17 || id_F =8group BY RG_nameEG_nameS_name 
    Edit:
    hm..habe etwas rumgespielt mit der Abfrage und jetzt funktioniert es anscheiend. Habe Group By geändert in: Group By id_F, RG_name, EG_name
    Zuletzt geändert von Mafiose; 18.01.2010, 11:31.

  • #2
    kann mir jemand erklären warum das jetzt funktioniert?

    anscheiend muss man bei Group auch die Ausgaben aus der Haupttabelle mit geben?
    also Group by id_F. Ist die Reihenfolge eigentlich wichtig bei Group by?

    Zusammengefasst:
    Ich habe Tabelle A, die zu anderen Tabellen B,C usw.. in n:m Beziehung steht.

    Möchte folgende Ausgabe haben
    Code:
    Tabelle A;Tabelle B; Tabelle C; 
    blub;      xxx;       aaa, bbb, ggg;
    blub;      yyy;       aaa, bbb, ggg;
    huch;      xxx;       aaa;
    argh;      zzz;       ddd, ffff;
    argh;      yyy;      ddd, ffff;

    Kommentar


    • #3
      Hallo,

      Zitat von Mafiose Beitrag anzeigen
      kann mir jemand erklären warum das jetzt funktioniert?
      Ja, aber dafür müsstest du eine konkrete Frage stellen.

      Zitat von Mafiose Beitrag anzeigen
      anscheiend muss man bei Group auch die Ausgaben aus der Haupttabelle mit geben?
      Was meinst du mit Haupttabelle? Du musst alle Spalten in die GROUP BY Klausel aufnehmen, nach denen es gruppiert werden soll. Wenn zwei verschiedene Datensätze in diesen Spalten übereinstimmen, werden sie zusammengefasst. Wenn du also eine Spalte nicht angegeben hattest und die Datensätze in den anderen Spalten schon übereinstimmten, wurde vermutlich zu viel in einer Gruppe zusammengefasst, also auch das, was in der vergessenen Spalte unterschiedlich war.

      Zitat von Mafiose Beitrag anzeigen
      Ist die Reihenfolge eigentlich wichtig bei Group by?
      Nein, aber sie kann die Sortierung beeinflussen.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        Haupttabele meine ich, die Tabelle die nicht in Left join vorkommt sondern bei "FROM Table"

        Ich Versuche mal die Frage anders zu formulieren.

        Tabelle A
        idA; name
        1; X
        2; Y

        Tabelle B
        idB; Buchstabe
        20; ABC
        21; DEF

        Tabelle A_hat_Tabelle B
        id_A; id_B
        1;20
        1;21
        2;20

        Wenn ich nur nach Buchstabe gruppiere, dann kommt sowas raus?
        X; ABC
        X; DEF

        Wenn ich nach name und Buchstabe gruppiere, dann kommt sowas?
        X; ABC
        X; DEF
        Y; ABC

        SQL
        PHP-Code:
        Select name from TableA
        left join Tabelle A_hat_Tabelle B on 
        (TableA.idA Tabelle A_hat_Tabelle B.id_A)
        left join TableB on (TableB.idB=Tabelle A_hat_Tabelle B.id_BGroup by name,Buchstabe 
        zweite Frage spielt es keine rolle ob der Feld nach dem ich gruppiere in Left join vorkommt oder zwischen Select und From Table

        also würde das auch gehen? warum?
        PHP-Code:
        Select name from TableA
        left join Tabelle A_hat_Tabelle B on 
        (TableA.idA Tabelle A_hat_Tabelle B.id_A)
        left join TableB on (TableB.idB=Tabelle A_hat_Tabelle B.id_BGroup by idA,Buchstabe 

        Kommentar


        • #5
          Zitat von Mafiose Beitrag anzeigen
          Wenn ich nur nach Buchstabe gruppiere, dann kommt sowas raus?
          X; ABC
          X; DEF

          Wenn ich nach name und Buchstabe gruppiere, dann kommt sowas?
          X; ABC
          X; DEF
          Y; ABC
          Genau, weil der Buchstabe unterschiedlich ist und dieser Unterschied im ersten Fall ignoriert wird, weil der Buchstabe nicht in der GROUP BY Klausel enthalten ist.

          Zitat von Mafiose Beitrag anzeigen
          zweite Frage spielt es keine rolle ob der Feld nach dem ich gruppiere in Left join vorkommt oder zwischen Select und From Table
          Im Standard SQL geht das nicht, aber MySQL erlaubt es.

          Zitat von Mafiose Beitrag anzeigen
          also würde das auch gehen? warum?
          PHP-Code:
          Select name from TableA
          left join Tabelle A_hat_Tabelle B on 
          (TableA.idA Tabelle A_hat_Tabelle B.id_A)
          left join TableB on (TableB.idB=Tabelle A_hat_Tabelle B.id_BGroup by idA,Buchstabe 
          Besser ist es, nach der ID zu gruppieren (bzw. nach dem Primärschlüssel). Wenn der Name aber eindeutig ist, kommt dasselbe raus. Das Statement ist aber ungültig, denn die ON-Bedingung ergibt keinen Sinn.

          Amica
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            ok so langsam verstehe ich die Klausel Group by

            du meinst aber
            weil der name nicht in der GROUP BY Klausel enthalten ist.

            Warum ist den die ON Bedinung falsch?

            PHP-Code:
            Select name from TableA 
            left join TabelleA_hat_TabelleB on 
            (TableA.idA TabelleA_hat_TabelleB.id_A
            left join TableB on (TableB.idB=TabelleA_hat_TabelleB.id_BGroup by idA,Buchstabe 

            Kommentar


            • #7
              Zitat von Mafiose Beitrag anzeigen
              weil der name nicht in der GROUP BY Klausel enthalten ist.
              Ja, ich dachte, dass ABC eine Name und X bzw. Y ein Buchstabe ist.

              Zitat von Mafiose Beitrag anzeigen
              Warum ist den die ON Bedinung falsch?

              PHP-Code:
              Select name from TableA 
              left join TabelleA_hat_TabelleB on 
              (TableA.idA TabelleA_hat_TabelleB.id_A
              left join TableB on (TableB.idB=TabelleA_hat_TabelleB.id_BGroup by idA,Buchstabe 
              Diese nicht (die Klammern sind überflüssig), aber vergleich die mal mit der von mir bemängelten - die war falsch.
              Zuletzt geändert von AmicaNoctis; 19.01.2010, 17:47.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Jepp hast recht.

                Weißt du vlt. ob es Sinnvoller ist in SQL Statement die Daten schon so anzupassen oder lieber eine einfachere Select Abfrage und die Daten dann mit PHP anpassen.
                Also ist die Performance schlechter oder besser?

                Kommentar


                • #9
                  Das kann man pauschal nicht sagen. Man sollte jedoch darauf achten, dass die Filterung, Sortierung, Gruppierung der Daten SQL-seitig erfolgen sollte. Wenn du die Daten erstmal verarbeiten musst, um sie filtern, sortieren, gruppieren zu können, dann macht diese Verarbeitung nur SQL-seitig Sinn. Wenn es nur um die Ausgabe geht, ist es egal, wer es macht.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar

                  Lädt...
                  X