Zweimal COUNT() in einer Abfrage

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

  • Zweimal COUNT() in einer Abfrage

    Klingt kompliziert, ist es vielleicht auch. Ich hatte bisher jedenfalls so meine Probleme.

    Folgendes: In einer Tabelle sind die Autoren gespeichert, zwei weitere enthalte Termine, die dritte Artikel. Nun möchte ich die Autoren ausgeben und dazu die Anzahl der von ihnen erstellten Artikel zum einen und der Termine zum anderen anzeigen. Das untenstehende Kommando funktioniert zwar, doch sind die Ergebnisse der beiden COUNT()s seltsam - sie ergeben beide den gleichen Wert, der, wie mir scheint, das Produkt der einzelnen Anzahlen ist. 6 Termine mal 20 Artikel gleich 120. 120 gibt mir COUNT() in beiden Fällen aus.

    Code:
    SELECT nickname,COUNT(artikel_id),COUNT(termin_id) 
    FROM artikel,termine,authors 
    WHERE author_id=2 
    AND author_id=artikel.author 
    AND author_id=termine.author 
    GROUP BY author_id
    Ist soetwas mit einer einzelnen Abfrage überhaupt realisierbar? Oder was mache ich noch falsch? Ich hoffe alle benötigten Angaben sind vorhanden und der Rest erklärt sich von selbst.

    Vielen Dank im Vorraus!
    NiFreDi
    Zuletzt geändert von nifredi; 18.09.2008, 16:33.

  • #2
    brich mal deinen code um!

    und was genau willst du nun ausgeben?

    autor1 termin1 count:10
    autor1 termin2 count:11
    autor2 termin1 count:2
    etc...
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      code umbrechen!

      Code:
      COUNT(artikel_id) AS artikel_cnt,COUNT(termin_id) AS termin_cnt
      it's not a bug,
      it's a feature!

      Kommentar


      • #4
        So, also noch einmal etwas ausführlicher: Ich habe drei Tabellen: eine enthält die Autoren, alle mit einer eindeutigen ID versehen, eine für Artikel, dort ist nun wieder die ID des Autors, der den Artikel erstellt hat gespeichert, ebenso in der dritten Tabelle, die die Termine enthält.
        Nun möchte ich die Autoren in einer Liste ausgeben, mit der zusätzlichen Angabe, wie viele Artikel und wie viele Termine er erstellt hat.

        Autorenname, Anzahl durch ihn erstellte Artikel, Anzahl Termine

        Zur Zeit ermittle ich die Anzahlen durch weitere Abfragen innerhalb der Schleife zum Ausgeben der Datensätze, bei rund 250 Datensätzen ist dies jedoch sehr langsam.

        Die obige Abfrage gibt jedoch, wie dort beschrieben, falsche Werte aus.

        Kommentar


        • #5
          Was hast du denn versucht?

          Du wirst u.A. um ein Group By nicht herumkommen...

          Wenn du in der ersten Table n Autoren hast musst du diese Autoren ID wiederrum mit den Artikel mit inner join verknüpfen....
          dort musst dann wiederrum die ID des Autors gruppieren
          und erst dann kann die count sagen wieviel Artikel der Autor auch hat...

          Und die Termine musst dann halt auch noch mit reinnehmen....
          [color=blue]MfG Payne_of_Death[/color]

          [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
          [color=red]Merke:[/color]
          [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

          Murphy`s Importanst LAWS
          Jede Lösung bringt nur neue Probleme
          Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
          In jedem kleinen Problem steckt ein großes, das gern raus moechte.

          Kommentar


          • #6
            Original geschrieben von nifredi

            Die obige Abfrage gibt jedoch, wie dort beschrieben, falsche Werte aus.
            Weil der blöde MySQL alles zu lässt ... Aggregate Functions funtioniert nur richtig, wenn alle selektierte Spalten auch gruppiert werden, d.h. alles was kein Argument von Aggregatfunktion ist, muss in GROUP BY rein, dann klappt auch mit dem Ergebnis.

            Kommentar

            Lädt...
            X