count() wert summieren mit sum()

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

  • count() wert summieren mit sum()

    Halli Hallo,

    hab da so ein Problemchen was ich eigentlich schon länger mit PHP umgangen hab, aber jetzt will ich das ganze doch schön in MySQL lösen is halt einfach eleganter und ich weiss auch das es mit MySQL möglich ist nur ich bin anscheinend einfach noch zu unerfahren.

    Folgendes:
    ich möchte einen count() wert mit sum() summieren

    hier mein SQL:
    PHP-Code:
    mysql_query(SELECT t1.id_searchrequest,t1.request,
    COUNT(t1.request) as requestsumme,
    SUM(
    SELECT COUNT(t2.request) as requestsumme
    FROM s_searchrequest 
    as t2
    WHERE t2
    .ip_adresse != '117.6.38.221'
    AND t2.request t1.request
    GROUP BY t2
    .request
    ORDER BY requestsumme DESC
    LIMIT 0
    ,100
    ) as requestsumme_gesamt,

    SUM(t1.searchresult) as searchresults
    FROM s_searchrequest 
    as t1
    WHERE t1
    .ip_adresse != '117.6.38.221'
    GROUP BY t1.request
    ORDER BY requestsumme DESC
    LIMIT 0
    ,100); 
    Ergebnis zum Beispiel:
    request requestsumme requestsumme_gesamt
    schuhe 15 100
    hose 15 100
    shirt 60 100
    pulli 10 100

    request -> sind suchbegriffe nach denen auch gruppiert wird und die gruppierten Zeilen werden als requestsumme ausgegeben.
    Hintergrund ist einfach eine Statistik einer Suchauswertung also
    die TOP 100 Suchbegriffe zb ich will jetzt halt einfach prozentual immer darstellen wie oft der Suchbegriff gesucht wurde und dazu brauche ich die summer aller requestsumme
    klar könnte da den PHP compiler bemühen, aber ich will mich ja weiterentwickeln und mysql noch besser kennen lernen . Hoffe ihr könnt mir da helfen!

    Grüße
    Tom


    ich weiss das folgendes nicht geht´:

    - sum(count()) funzt ned hab ich nachgelesen(MySQL) und getestet
    - subquey SUM(
    SELECT COUNT(t2.request) as requestsumme
    FROM s_searchrequest as t2
    WHERE t2.ip_adresse != '217.91.38.221'
    AND t2.request = t1.request
    GROUP BY t2.request
    ORDER BY requestsumme DESC
    LIMIT 0,100
    ) as requestsumme_gesamt, --> evtl einfach falsch?! gibt aber eigentlich die richtigen Spalten Werte er kann Sie einfach ned summieren...
    - und dann hab ich das noch gefunden: user-variables
    ---> @x:=COUNT(t1.request) as requestsumme,
    SUM(@x) as requestsumme_gesamt, () funzt ja anscheinend nicht mit Statements die GROUP BY beinhalten

    Also ich hab schon ziemlich viel im Internet gestöbbert und ich denke ich weiss auch das man das ganze nur subquerys zu lösen sein wird.
    Zuletzt geändert von tomtherock; 03.09.2007, 13:01.

  • #2
    OffTopic:
    klar könnte da den PHP compiler bemühen
    glaube ich kaum


    SUM() summiert die Werte über mehrere Spalten, nicht aber von einzelnen Abfragen. Ich empfehle dir, für jeden Artikel den du summieren willst eine subquery zu starten, und die gelieferten Ergebnisse mittels altmodischem Plus zu addieren.
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      Wie würde das dann ausschauen?

      Hab den jetzt nen Subquery verwendet so weit nur wie jetzt addieren ohne SUM?!

      PHP-Code:

      mysql_query
      (SELECT t1.id_searchrequest,t1.request,
      COUNT(t1.request) as requestsumme,
      SUM(t1.searchresult) as searchresults,

      (
      SELECT COUNT(t2.request) as requestsum
      FROM s_searchrequest 
      as t2
      WHERE t2
      .ip_adresse != '213.22.33.221'
      AND t2.request t1.request
      GROUP BY t2
      .request
      ORDER BY requestsum DESC
      LIMIT 0
      ,100
      ) as requestsumme_gesamt

      FROM s_searchrequest 
      as t1

      WHERE t1
      .ip_adresse != '213.22.33.221'
      GROUP BY t1.request
      ORDER BY requestsumme DESC
      LIMIT 0
      ,100); 
      Eregbis:
      id_searchrequest request--------- requestsumme searchresults requestsumme_gesamt
      518___________|_nike+___________|__4_____|_____116_____|____4
      83____________|_New Balance 766_|__4_____|______20_____|____4
      108___________|_kswiss__________|__3_____|_____105_____|____3
      106___________|_gt-2120_________|__2_____|_____371_____|____2
      80____________|_New Balance 857__|__2_____|_____10______|___2
      101___________|_nike porsche_____|__2______|_____0______|____2
      95____________|_nike advantage___|__2______|____720_____|___2
      104___________|_gt 2120_________|__2______|_____0______|___2
      Zuletzt geändert von tomtherock; 03.09.2007, 16:22.

      Kommentar


      • #4
        z.B. (t1.searchresult + t2.searchresult) as searchresults
        Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

        Kommentar


        • #5
          mhhh des würde so ned klappen weil searchresults nur die suchtreffer des Suchwortes(request) zurück geben....(mysql_num_rows() bei der Logg funktion)

          COUNT( t1.request ) AS requestsumme will ich ja summieren...

          kann man in SQL eigentlich wie in PHP einen Wert immer so aufsummieren:

          $summe += $summe;

          ? Also in SQL

          (COUNT( t1.request )+=COUNT( t1.request )) AS requestsumme
          Zuletzt geändert von tomtherock; 03.09.2007, 16:27.

          Kommentar


          • #6
            Hab ich auch grad getestet kommt zwar kein Fehler aber voll die Misst Ergebnisse bei der _gesamt raus:

            PHP-Code:

            SELECT t1
            .id_searchrequest,t1.request,
            COUNT(t1.request) as requestsumme,
            SUM(t1.searchresult) as searchresults,

            @
            x:=(
            SELECT COUNT(t2.request) as requestsum
            FROM s_searchrequest 
            as t2
            WHERE t2
            .ip_adresse != '217.91.38.221'
            AND t2.request t1.request
            ) as x,
            SUM(@x) as requestsumme_gesamt

            FROM s_searchrequest 
            as t1

            WHERE t1
            .ip_adresse != '217.91.38.221'
            GROUP BY t1.request
            ORDER BY requestsumme DESC
            LIMIT 0
            ,100 
            ODER

            PHP-Code:
            SELECT t1.id_searchrequest,t1.request,
            COUNT(t1.request) as requestsumme,
            SUM(t1.searchresult) as searchresults,

            SUM((
            SELECT COUNT(t2.request) as requestsum
            FROM s_searchrequest 
            as t2
            WHERE t2
            .ip_adresse != '217.91.38.221'
            AND t2.request t1.request
            )) as requestsumme_gesamt

            FROM s_searchrequest 
            as t1

            WHERE t1
            .ip_adresse != '217.91.38.221'
            GROUP BY t1.request
            ORDER BY requestsumme DESC
            LIMIT 0
            ,100 
            SELECT COUNT(t2.request) as requestsum
            FROM s_searchrequest as t2
            WHERE t2.ip_adresse != '217.91.38.221'
            AND t2.request = 'kswiss'

            Ergibt zb genau 3 was stimmt und dann muss er doch den Subquerysummieren können macht er aber ned sonder macht wegen dem GROUP BY nehme ich an 3*3 weil dahinter im haupt query ja 3 rows mit count gezählt werden?!?!?!

            Kommentar


            • #7
              Jetzt bin ich total verwirrt.

              (COUNT( t1.request ) + COUNT( t1.request ))

              ist doch das gleiche wie

              (COUNT( t1.request ) * 2)
              Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

              Kommentar


              • #8
                Jetzt bin ich total verwirrt.

                (COUNT( t1.request ) + COUNT( t1.request ))

                ist doch das gleiche wie

                (COUNT( t1.request ) * 2)
                ja LOGO in PHP würde ich das was ich will ja easy so erreichen:

                PHP-Code:
                WHILE($row=mysql_fetch_object($res_requests))
                {
                $request $row->requestsumme;


                $request_gesamtsumme += $request;


                Nur ich benötige ja schon bei der ersten Schleife die Gesamtsumme aller Zeilen bzw der Gesamtsumme der Request die gezählt werden also:
                "Nike" -> 3
                "kswiss" -> 7
                "schuhe" -> 3
                usw....
                ergibt gesamt: 13

                Hab nur echt kein Plein wie ich das erreichen kann es muss doch gehen diesen Wert zu summieren und das schon in der SQL Abfrage

                Kommentar


                • #9
                  Wieso werkelst du denn immernoch mit deinem SUM() rum? Normale arithmetische operationen (Plus) sollten doch kein Problem sein?

                  Versuch dich doch mal ein wenig mit

                  Code:
                  (anzahlVonSubQuery1 + anzahlVonSubQuery2) AS gesamtAnzahl
                  viel Erfolg.
                  Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                  Kommentar

                  Lädt...
                  X