Group By

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

  • Group By

    Hallo zusammen

    Habe eine Frage betreffend dem GROUP BY.
    Als Ausganglage habe ich folgende Tabelle.

    T / A1 / A2
    ---------------------------
    Karl / Thomas / Michael
    Thomas / Karl
    Michael / Horst / Thomas

    Als Resultat möchte ich

    Name / T / A=(A1+A2) also dann mit dem Beispiel...

    Thomas / T = 1 / A = 2
    Karl / T = 1 / A = 1
    ...

    Habe es probiert mit dem Group-Befehl, aber leider weiss ich nicht, wie ich den über mehrere Spalten ansetzen kann. Oder muss ich da verschiedene Abfragen machen?

    Danke für eure Antwort.

  • #2
    Mit anderen Worten: Du willst zu jedem Namen
    1. die Anzahl der Vorkommen in Spalte T
    2. die Anzahl der Vorkommen in A1 und A2 zusammengezählt

    Das hier könnte hinhauen (nicht getestet):

    Code:
    select distinct(a.T) as NAME, count(a.T) as T,
      sum(if(b.A1=a.T, 1, 0) + if(b.A2=a.T, 1, 0)) as A
      from tabelle a
      left join tabelle b on b.A1=a.T or b.A2=a.T
      group by a.T
    Problematisch wird´s, wenn T=0 auch noch mit rein soll.
    Dann lässt sich das afaik mit einer Query nicht bewerkstelligen.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      es wird situationen geben, in welchen T=0 sind. also personen die nur A1 oder A2 haben. gibt es dann fehler? falls es mit einer query nicht funktioniert, gibt es andere möglichkeiten?

      Kommentar


      • #4
        T=0 tauchen nicht auf. Wenn du die aber auch brauchst, dann muss PHP zu Hilfe genommen werden:

        PHP-Code:
        $namen = array();
        // Namen und Vorkommen in Spalte T zählen
        $q mysql_query("select T, count(T) from tabelle group by T");
        while (
        $r mysql_fetch_row($q)) $namen[$r[0]]['T'] = $r[1];
        // Namen und Vorkommen in A1
        $q mysql_query("select A1, count(A1) from tabelle group by A1");
        while (
        $r mysql_fetch_row($q)) $namen[$r[0]]['A'] = $r[1];
        // Namen und Vorkommen in A2
        $q mysql_query("select A2, count(A2) from tabelle group by A2");
        while (
        $r mysql_fetch_row($q)) $namen[$r[0]]['A'] += $r[1];

        // ausgeben
        foreach ($namen as $name=>$erg)
          echo 
        "$name : T = $erg[0], A = $erg[1]<br>"
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          Danke, werde es so mal ausprobieren.

          Kommentar

          Lädt...
          X