Mehrere COUNTs

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

  • Mehrere COUNTs

    Hallo,
    ich habe ein kleines Problem mit dem Datensatz-Zählen und Summieren in mehreren Tabellen gleichzeitig:

    Code:
    SELECT COUNT(a.id) AS pictures,
    SUM(a.views) AS views,
    SUM(a.size) AS size,
    SUM(a.comments) AS comments,
    COUNT(b.id) AS albums,
    COUNT(c.id) AS categories
    FROM gallery a
    JOIN gallery_albums b USING(id)
    JOIN gallery_categories c USING(id)
    Er zählt bei mir alles viel weniger und Summieren tut er auch viel zu wenig (irgendwie nur die ersten 3 datensätze oder so -.-) Habe seit gestern schon 5x gesucht, aber nie einen ähnlichen Beitrag zu meinem Problem gefunden bzw. die dortigen Möglichkeiten haben mich nicht weitergebracht.
    Danke im voraus!

  • #2
    eines der Nachteile von MySQL, er schlucht jeden Sch**ß, ohne zu meckern und liefert einfach irgendwas.

    1. Beim Einsatz von Aggregat-Funktionen immer GROUP BY verwenden
    2. USING lieber nicht verwenden, vor allem wenn mehr als 2 Tabellen vorkommen, stattdessen ON einsetzen

    Kommentar


    • #3
      Puuh... hatte das irgendwie schonmal mit GROUP BY probiert gehabt, aber bin nicht wirklich zu einem Ergebnis gekommen ;(
      Wie müsste denn die Query stattdessen aussehen?

      Kommentar


      • #4
        du musst doch wissen, auf welchen Basis du die Daten zählst bzw. aufsummierst, gruppiere danach

        Kommentar


        • #5
          Also irgendwie verstehe ich wohl die GROUP BY-Syntax falsch und aus der Dokumentation werde ich nicht schlau, denn trotz dem hier funktioniert es immernoch nicht:
          PHP-Code:
          SELECT COUNT(a.id) AS pictures,
          SUM(a.views) AS views,
          SUM(a.size) AS size,
          SUM(a.comments) AS comments,
          COUNT(b.id) AS albums,
          COUNT(c.id) AS categories
          FROM gallery a
          JOIN gallery_albums b
          gallery_categories c
          GROUP BY a
          .idb.idc.id 

          Kommentar


          • #6
            Hi !

            Ich bin bei weitem nicht der Profi, was gerade GROUP BY angeht, aber du müsstest doch, wenn ich mich nicht irre, nach pictures, views, usw. gruppieren.

            Gruß

            Le Cheffe

            Kommentar


            • #7
              und wo sind denn die Verknüpfungsbedingungen?

              Kommentar


              • #8
                Hilfe... ich verstehe nur Bahnhof was ihr beiden eben gesagt habt ;(

                Kommentar


                • #9
                  lese den Punkt 2 von meinem 1. Post, und mach dich schlau: http://dev.mysql.com/doc/refman/4.0/de/join.html

                  Kommentar


                  • #10
                    Original geschrieben von asp2php
                    und wo sind denn die Verknüpfungsbedingungen?
                    Meinst mich ?

                    Ich würde es eh über JOINs machen ... LEFT JOIN tab_a ta ON ta.id = <irgendwas>.id ... usw.
                    Das sollte doch reichen, oder nicht ?

                    Gruß

                    Le Cheffe

                    Kommentar


                    • #11
                      Original geschrieben von Le_Cheffe
                      Meinst mich ?
                      nein, den Threadstarter , anfangs hat er noch, aber dann nicht mehr drin

                      Kommentar


                      • #12
                        Grrr... ich glaube ich nähere mich dem Ergebnis... Allerdings finde ich nirgends auf mysql.com eine Erklärung wie GROUP BY genau funktioniert bzw. wozu es gut ist
                        PHP-Code:
                        SELECT COUNT(a.id) AS pictures,
                        SUM(a.views) AS views,
                        SUM(a.size) AS size,
                        SUM(a.comments) AS comments,
                        COUNT(b.id) AS albums,
                        COUNT(c.id) AS categories
                        FROM gallery 
                        AS a
                        LEFT JOIN gallery_albums 
                        AS b ON b.id
                        LEFT JOIN gallery_cats 
                        AS c ON c.id
                        GROUP BY a
                        .id 

                        Kommentar


                        • #13
                          group by zieht Werte, auf die die group Bedingung zutrifft, zu einem Wert zusammen, um es mal knapp zu sagen.

                          Gruppieren kann man nach so gut wie allem, was sich als auch asl SELECT-Statement formulieren lässt, also ein oder mehrere Felder, Stringfunktionen auf Felder angewandt, mathematische Berechnung etc. etc.

                          Entweder benutzt man group, um doppelte Werte auszuschalten (ähnlich wie DISTINCT) oder um mit den GRoup-Funktionen
                          bestimmte Werte aus den jeweils gruppierten Datensätzen zu erhaltenwie COUNT, SUM usw.
                          Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                          Kommentar


                          • #14
                            Auf der Seite war ich auch schon mittlerweile 10x, aber ich werde einfach nicht daraus schlau wie ich das bei mir einbauen sollte. Bei mir ist jeder Wert den ich selektiere entweder ein COUNT oder ein SUM, von daher habe ich keine ahnung wie ich da was gruppieren soll...

                            Kommentar


                            • #15
                              was willst Du überhaupt alles zählen bzw summieren?

                              Ausserdem sind Deine ON() bedingungen etwas lückenhaft
                              ON (b.id = c.id)
                              Aber wie hast Du eigentlich die Tabellen verknüpft, doch sicher nicht über das Feld id, oder? Da dürfte doch nur die fortlaufende Id der jeweiligen Tabelle sein.

                              Zeig mal Deine Datenbankstruktur
                              Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                              Kommentar

                              Lädt...
                              X