SQL Abfrage.... Wert einer Zeile mit anderem Multi...

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

  • SQL Abfrage.... Wert einer Zeile mit anderem Multi...

    Hallo. Sorry erst mal für die "blöde" Thread-Überschrift...

    Also mein Problem:

    Ich habe eine tabelle namens $download_table. in dieser Tabelle werden Downloads gespeichert. Nun habe ich in jeder Zeile jeden Downloads die SPalte "dlsize" und "dlhits". Die Tabelle schaut so aus:

    dlid | dltitel | dlhits | dlsize | undundund
    -----|---------|--------|---------|----------------
    1 | Dl 1 | 15 |78451 |
    2 | DL2 | 28 |64521 |
    3 | DL3 | 12 |22364 |

    So, nun möchte ich eine GESAMT Traffic auswertung in MB haben. das heisst ich muss für jeden Download die dlsize * dlhits rechnen. anschliessend müssen alle ergebnisse Addiert werden. Wie kann ich das direkt in einer SQL Abfrage machen?

    Danke für eure Hilfe!

    Grüsse Manfred

  • #2
    select dlid , dltitel , dlhits , dlsize , dlhits*dlsize as traffic from tbl;
    Die Summe kann in einer while schleife bei der Ausgabe gebildet werden oder mit einem extra sql.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      hmmm...ok, ich bin nun kein Mathematisches Genie, und php steh ich noch am anfang.
      Also bei dieser Abfrage wird erst mal mit jeder Zeile dlsize*hits gerechnet?
      Wie müsste , wenn ich das ergebnis mit einer sql abfrage machen möchte, diese aussehen?

      Danke schonmal für Deine Hilfe

      Grüsse Manfred

      Kommentar


      • #4
        so müsste das aussehen ..

        Code:
        select SUM(dlhits*dlsize) as gesamttraffic from tbl;
        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


        • #5
          Code:
          select sum(dlsize * dlhits) from $download_table;
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            ? Also, hmm, ich hab nen totalen Durchhänger

            Wenn ich die Summe von dlsize mit der summe von dlhits rechne, da kommt doch nie das ergebniss raus des gesamten trafics?

            wenn ein file 1000 mit 5 hits
            und ein anderes 2000 mit 8 hits

            dann bekomm ich bei summe dlsize 3000 und bei summe dlhits 13. das addiert ergibt 39000

            wenn ich aber dlsize 1000 * dlhitz 5 = 5000

            und 2000* 8 = 16000

            Die summe von Zeile eins und zwei ergibt aber 21000 ?!?

            Ihr versteht mein Problem?!?

            (Für evt. Rechenfehler wird keine Haftung übernommen )

            Grüsse Manfred

            Kommentar


            • #7
              hast du mal die query getestet, die TBT und ICH zeitgleich gepostet haben?
              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


              • #8
                Ich glaub ich steh im wald...

                Aaalso, hab eures getestet:
                PHP-Code:
                $my_traffic = list ($traffic1) = $db_sql->sql_fetch_row("select SUM(dlhits * dlsize) from dl1_downloads");
                $traffic3  = ((traffic1) / 1002400); 
                Die variable Traffic3 bringt als ergebniss 0, was irgendwie nicht sein kann. Die grösse steht mit Bytes in der DB. es sind ca 50 Downloads da und Traffic sollte jede menge sein, da auch genügend its da sind.

                Hier passiert folgendes:

                PHP-Code:
                $traffichits = list ($gesamthits) = $db_sql->sql_fetch_row("select SUM(dlhits) from dl1_downloads");
                $trafficsize = list ($gesamtsize) = $db_sql->sql_fetch_row("select SUM(dlsize) from dl1_downloads");
                $mb_traffic = (($gesamthits)*($gesamtsize) / 1002400);
                $traffic round($mb_traffic,2); 
                Da bekomm ich ca 10819 MB Traffic bei raus, das stimmt alerdings ja auch nicht, da ich nicht die Summe von dlsize * dlhits rechnen darf. Ich muss die Summe jeder einzelnen Zeile Addieren.
                Ich glaub ich leg mich gleich wieder ins Bett
                Irgendwo hängts.
                Wie könnte man das mit einer While schleife lösen? ich frag alle DL´s ab, sortiert nach catid. lass eins nach dem anderen ausrechnen. In der While schleife wird ja dann solange gerechnet bis sämtliche ergebnisse adiert sind, ne?

                Grüsse Manfred

                Kommentar


                • #9
                  du teilst falsch... => 1002400 das geht nicht.

                  PHP-Code:
                  $MB_traffic3  number_format ( (traffic1 1024 1024), 2",""."); 
                  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


                  • #10
                    hatte mich auch schon gewundert was diese Zahl da zu suchen hat

                    fertiges Statement, das gleich MB zurückliefert:
                    PHP-Code:
                    select SUM(dlhits dlsize 1024 1024from dl1_downloads 
                    und SUM(dlhits*dlsize) bildet eine Gesamtsumme über die Produkte die sich in jeder Zeile ergeben. Es werden also NICHT zuerst alle Hits summiert und dann mit der Summe der Größen multipliziert.

                    Kommentar


                    • #11
                      Danke, es funzt! Aber warum kann man nicht Durch eine Million teilen? hab da noch ne andere sql zum Speicherplatzverbrauch der Files, dort gehts?!?
                      Naja, als Ergebniss kommt 450 MB Traffic raus, das sieht schon anders aus

                      Dank euch nochmal!

                      Grüsse Manfred

                      Kommentar


                      • #12
                        Eine Million geht auch so ungefähr, da ein KB ja nicht gleich 1000 Byte, sondern halt 1024 Byte sind (wenn Du also durch 1.000.000 teilst bekommst Du nur ein ungefähres Ergebnis). Du teilst einmal durch 1024 um auf KB zu kommen, und ein zweites Mal um auf die MB zu kommen. Kannst also auch gleich durch 1048576 teilen (1024²).

                        Kommentar


                        • #13
                          genau. man muss durch die richtige zahl teilen ...

                          das ergebnis würde ähnlich deinem sein. du hast aber die komplett falsche zahl zum teilen genommen ...

                          1002400 -> vor der 24 war ne null zu viel und dahinter zu wenig.
                          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


                          • #14
                            Jaja, immer diese zufällig verursachten Zahlendreher *schnell alle scripte umschreib*

                            Hätt ich in mathe besser aufgepasst... ok, das geht vom Thema ab


                            Grüsse Manfred

                            Kommentar


                            • #15
                              OffTopic:
                              nicht so viel saufen .....
                              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

                              Lädt...
                              X