Falsche ausgabe der COUNTs

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

  • Falsche ausgabe der COUNTs

    Hi.. habe eine Abfrage, welche Statistiken eines Users auslesen soll.

    Er bingt jedoch mit dieser Abfrage:

    PHP-Code:

    $statistiken 
    "

    SELECT
                COUNT(c.thread_id) AS oppens,
                COUNT(d.gb_id) AS geschrieben,
                COUNT(g.gid) AS gallerybilder,
                COUNT(h.com_id) AS comms,
                COUNT(i.web_id) AS webs,
                COUNT(j.post_id) AS bei,
                COUNT(k.abbo_id) AS abbom,
                a.statistik_logins,
                a.statistik_themen,
                a.statistik_beitraege,
                a.statistik_profilaufrufe,
                a.statistik_votings,
                a.statistik_galleries,
                a.statistik_comments,
                a.punkte,
                a.bar_punkte,
                a.anmeldungzeit AS regist,
                a.lastlogintime AS logint,
                a.id,
                b.profil_lastupdate
    FROM
                user a
    LEFT JOIN
                profil b
           ON
                a.id=b.profil_userid
    LEFT JOIN
                threads c
           ON
                c.thread_user_id=a.id
    LEFT JOIN
                user_gb d
           ON
                a.id=d.gb_autor_id
    LEFT JOIN
                gallery g
           ON
                a.id=g.userid
    LEFT JOIN
                gallery_comments h
           ON
                a.id=h.com_userid
    LEFT JOIN
                weblinks i
           ON
                a.id=i.web_user_id
    LEFT JOIN
                postings j
           ON
                a.id=j.post_user_id
    LEFT JOIN
                forumabbo k
           ON
                a.id=k.abbo_user_id
    WHERE
                a.id = '"
    .$user_id."'
    GROUP BY
                a.id
    HAVING
                id = '"
    .$user_id."'

    "

    bei allen ausgaben mit COUNT(blah), welche größer als Null sind, die zahl: 13566 ..

    statement falsch aufgebaut??



    EDIT:
    Offensichtlich ja.. O.-) jedesmal wenn das script aufgerufen wird, schmiert der server ab? jedenfalls wird er lahm und für mehrere minuten ist die ganze community nicht erreichbar.. sieht böse aus ! hab es erstmal wieder runter.. mit was soll ich mich beschäfftigen zwecks der abfrage, die falsch ist? ( von den befehlen her? )
    Zuletzt geändert von xManUx; 21.08.2004, 04:34.

    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

  • #2
    ähm ... was willst du denn mit having erreichen? zu welcher Tabelle gehört diese id?

    Kommentar


    • #3
      Original geschrieben von asp2php
      ähm ... was willst du denn mit having erreichen? zu welcher Tabelle gehört diese id?

      ähm nix.. hatte nur rumprobiert

      die id gehört zur tabelle user !

      Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
      sondern mit den Augen das Manual zu lesen.

      Kommentar


      • #4
        keiner nen Lösungsansatz für mich?

        Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
        sondern mit den Augen das Manual zu lesen.

        Kommentar


        • #5
          danke für die imaginären antworten von allen

          Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
          sondern mit den Augen das Manual zu lesen.

          Kommentar


          • #6
            was asp2php dir sagen wollte war wohl: du brauchst das having nicht, nimm es raus

            und dann bau das statement mal sukzessive auf, also eine tabelle nach der anderen dazunehmen, zählt er richtig, wenn du nur die tabellen user und threads hast?

            dann frage ich mich, was in der tabelleprofil steht, das nicht in die user tabelle gepasst hätte?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              ja having ist draußen.. was meinst du mit "sukzessive" aufbauen?

              1. ja dann zählt er richtig
              2. wenn ich 2 tabellen habe und COUNT(tab1.spalte1) und COUNT(tab2.spalte2) über zwei verschiedene tabs in einer abfrage mache, liefert er den wert ebenfalls falsch..

              3. in der profil tabelle stehen persönliche angaben etc. unter anderem auch letztes update des profils.

              zum verständis ( fenster wird nomalerweise in einem popup geladen )

              http://www.max-3d.de/max3d/profil/st....php?user_id=5


              PS: hab das erstmal über noobvariante gemacht.. mehrere abfragen in mehreren mysql_queries
              Zuletzt geändert von xManUx; 24.08.2004, 10:10.

              Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
              sondern mit den Augen das Manual zu lesen.

              Kommentar


              • #8
                Original geschrieben von xManUx
                j2. wenn ich 2 tabellen habe und COUNT(tab1.spalte1) und COUNT(tab2.spalte2) über zwei verschiedene tabs in einer abfrage mache, liefert er den wert ebenfalls falsch..
                und du kannst dir das ergebnis nicht irgendwie aus einer geshcickten kombination der erwarteten werte herleiten?

                in der profil tabelle stehen persönliche angaben etc. unter anderem auch letztes update des profils.
                na dann ist ja alles klar
                persönliche daten gehören in die profiltabelle und in die usertabelle gehört alles was nicht persönlich ist

                was steht in der tabelle profil, das nicht in die tabelle user gehört?
                was steht in der tabelle user, das nicht in die tabelle profil gehört?
                erkläre er sich oder vereinige er die beiden tabellen
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  was steht in der tabelle profil, das nicht in die tabelle user gehört?
                  was steht in der tabelle user, das nicht in die tabelle profil gehört?
                  erkläre er sich oder vereinige er die beiden tabellen [/B]
                  in der tab. profil stehen die ganzen angaben zum profil. ( hobbies, abwesendheitsnachricht etc. ) und eine spalte für den primiärschlüssel von der userid.


                  habe gerade das gemacht in phpmyadmin:

                  Code:
                  SELECT
                              COUNT(c.thread_id) AS oppens,
                              COUNT(d.gb_id) AS geschrieben,
                              COUNT(g.gid) AS gallerybilder,
                              COUNT(h.com_id) AS comms,
                              COUNT(i.web_id) AS webs,
                              COUNT(j.post_id) AS bei,
                              COUNT(k.abbo_id) AS abbom
                  FROM
                              user a
                  LEFT JOIN
                              threads c
                         ON
                              c.thread_user_id=a.id
                  LEFT JOIN
                              user_gb d
                         ON
                              a.id=d.gb_autor_id
                  LEFT JOIN
                              gallery g
                         ON
                              a.id=g.userid
                  LEFT JOIN
                              gallery_comments h
                         ON
                              a.id=h.com_userid
                  LEFT JOIN
                              weblinks i
                         ON
                              a.id=i.web_user_id
                  LEFT JOIN
                              postings j
                         ON
                              a.id=j.post_user_id
                  LEFT JOIN
                              forumabbo k
                         ON
                              a.id=k.abbo_user_id
                  WHERE
                              a.id = '1'
                  GROUP BY
                              a.id
                  an sich ist eigentlich nichts falsch? er hat für dieses statement 81.4257 sek gebraucht. scheint so, als er WHERE a.id = '1' nicht "berücksichtigt" ?

                  die COUNT() sind alles primiärschlüssel mit INT 10. ( auto_increment )

                  ausgabe:

                  oppens | geschrieben | gallerybilder | comms | webs | bei | abbom
                  887040 | 887040 0 | 887040 | 0 | 887040 | 887040


                  lässt sich das nicht mit USING() irgendwie regeln?

                  Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                  sondern mit den Augen das Manual zu lesen.

                  Kommentar


                  • #10
                    Original geschrieben von xManUx
                    in der tab. profil stehen die ganzen angaben zum profil. ( hobbies, abwesendheitsnachricht etc. ) und eine spalte für den primiärschlüssel von der userid.

                    [...]

                    lässt sich das nicht mit USING() irgendwie regeln?
                    1. und warum kommt das nicht in die user-tabelle?

                    2. USING hilft dir da nicht, eventuell UNION, wenn dein mysql das schon kann
                    887040 wird wahrscheinlich COUNT(c.thread_id) * COUNT(d.gb_id) * COUNT(g.gid) * COUNT(h.com_id) AS comms * COUNT(i.web_id) * COUNT(j.post_id) * COUNT(k.abbo_id) sein (mit den werten die du erwartest)

                    da kannst du auch zeimlich wenig dran machen, um nicht zu sagen nichts
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      MySQL.. 3.23.56 .. dachte immer unser server hat 4.0...

                      unterstützt die mysqlversion UNION? ( mal nachschaut )

                      d.h. dann, dass diese mysql version jedes COUNT() immer * mit anderen counts nimmt.. ? sie bekommt nicht mal lächerliche 2 counts hin..

                      Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                      sondern mit den Augen das Manual zu lesen.

                      Kommentar


                      • #12
                        SELECT ....
                        UNION [ALL]
                        SELECT ....
                        [UNION
                        SELECT ...]

                        UNION ist implementiert in MySQL 4.0.0.
                        d.h. dass man nichts dran ändern kann?

                        Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                        sondern mit den Augen das Manual zu lesen.

                        Kommentar


                        • #13
                          sieht ganz so aus
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar


                          • #14
                            Original geschrieben von mrhappiness
                            sieht ganz so aus
                            ist der trafficverbrauch dadurch ( enorm ) erhöht, oder ist das nur minimal?

                            Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                            sondern mit den Augen das Manual zu lesen.

                            Kommentar

                            Lädt...
                            X