[SQL allgemein] Zählen der Gejointen Datensätze

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

  • [SQL allgemein] Zählen der Gejointen Datensätze

    Hi !

    Ich habe zwei Tabellen. Zu jedem Tupel in Tabelle 1 sind N Datensätze aus Tabelle 2 anhand eines keys miteinander verknüpft.

    Nun möchte ich, daß er mir einfach nur ausgibt, wieviele Datensätze aus Tabelle 2 mit dem jeweiligen Tupel in Tabelle 1 verknüpft sind ...

    Folgende Syntax bringt leider nicht den erhofften erfolg ...

    SELECT tabelle1_id, tabelle2_id, COUNT(tabelle2_id) AS anz
    FROM tabelle1
    INNER JOIN tabelle2
    ON (tabelle1_id = tabelle2_id)
    GROUP BY tabelle2_id

    Dieses Statement wirft zwar keinen Fehler aus - der PHP-Parser bricht aber aufgrund eines timeouts ab ...

    Was mache ich falsch ?!?
    Yeah !

  • #2
    SELECT tabelle1_id, COUNT(tabelle2_id) anz
    FROM tabelle1
    INNER JOIN tabelle2
    ON (tabelle1_id = tabelle2_id)
    GROUP BY tabelle1_id


    oder einfach nur
    SELECT tabelle2_id, COUNT(tabelle2_id) anz
    FROM tabelle2
    GROUP BY tabelle2_id

    Letzteres sollte in deinem Fall auch funktionieren, es sei denn, du hast in tabelle2 datensätze drin, die keine entsprechung in tabelle1 haben
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Nööööö, hab ich auch schon versucht gehabt -> timeout

      Ich poste mal den tatsächlichen Code - vielleicht habe ich ja anderswo den Fehler gemacht ...

      Code:
      $temp=	"SELECT f.letztereintrager, f.themen_id, ";
      $temp.=	"l.user_id, l.benutzer, ";
      $temp.=	"COUNT(fe.forenid) AS anz, ";
      $temp.=	"UNIX_TIMESTAMP(f.letzterbeitrag) AS zeit, ";
      $temp.=	"DATE_FORMAT(f.letzterbeitrag, '%d.%m.%Y um %H:%i') AS lastbeitrag ";
      $temp.=	"FROM forenthemen f ";
      $temp.= "INNER JOIN login l ";
      $temp.=	"ON (f.letztereintrager = l.user_id) ";
      $temp.= "LEFT OUTER JOIN foreneintraege fe ";
      $temp.= "ON (f.themen_id = fe.forenid) ";
      $temp.=	"WHERE vfid = '".addslashes($_GET['vfid'])."' ";
      $temp.=	"GROUP BY 'f.themen_id' ";
      $temp.=	"ORDER BY f.letzterbeitrag DESC ";
      $temp.=	"LIMIT ".addslashes($_GET['limit3']).", 10";
      Aber echt komisch ...
      Bisher hatte ich das so gelöst, daß ich den Join auf die Tabelle foreneintraege einfach weggelassen habe, das Ergebnis des Statements in einer Schleife ausgegeben habe und in jedem schleifendurchlauf eine Abfrage auf die tabelle foreneintraege losgejagt habe, der mir die Anzahl der Einträge zu dem jeweiligen Thread anzeigt ...
      Ich dachte eigentlich, ich würde immens Performance sparen, wenn ich diese 10 Abfragen gleich in das Ausgangsstatement reinaggregiere ;-)

      PS: Marzipannäschen ?!? *gg*
      Yeah !

      Kommentar


      • #4
        du gruppierst nach einem string
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Ohje ... das hört sich nicht gut an ;-)

          Was bedeutet das denn ?
          Yeah !

          Kommentar


          • #6
            GROUP BY 'f.themen_id'

            ist was anderes als GROUP BY f.themen_id


            behaupte ich einfach mal so
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Ja, das seh ich ein ;-)

              Obwohl ich nun aber die einfachen Hochkommas entfernt habe, ändert sich nichts ?!?
              Yeah !

              Kommentar


              • #8
                Code:
                $temp.= "LEFT OUTER JOIN foreneintraege fe ";
                den LEFTi benutzt du hier aber absichtlich? ein 'normaler' JOIN würde nicht funktionieren?
                PS: Marzipannäschen ?!? *gg*
                tja, ich war für Marzipanhäschen, aber ... *g
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  den LEFTi benutzt du hier aber absichtlich? ein 'normaler' JOIN würde nicht funktionieren?
                  Ich dachte eigentlich, der Left-Join wäre wegen der 1:n Beziehung sinnvoll ... Es ist meinem Server allerdings leider völlig egal, welche Form des Joins ich anwende - er reagiert grundsätzlich mit einem Timeout ... ich nehme das langsam persönlich ;-)

                  Marzipanhäschen
                  Wenn ich das nächste mal in Lübeck bin, schau ich mir bei Niederegger an, wie sowas aussieht ;-)
                  Yeah !

                  Kommentar


                  • #10
                    Tz - ich habs eben doch noch mal als INNER JOIN versucht - und siehe da ... zack, das Ergebnis ist da *freu*

                    Verschärften Dank ans Häschen und ans Hündchen :-)
                    Yeah !

                    Kommentar

                    Lädt...
                    X