Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bestimmte MySQL Felder summieren, BEwertung

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Bestimmte MySQL Felder summieren, BEwertung

    Hallo auch,

    bitte nicht gleich zerpflücken. Ich bastell schon den ganzen Abend einer für Experten sicherlich lächerlichen Aufgabe herum.

    Ich habe diesen Table:

    item|totalrate|nrrates
    rt_3_1|4|5
    rt_3_2|4|5
    rt_3_3|4|4
    rt_3_4|3|5
    rt_3_5|4|5
    rt_9_1|3|2
    rt_9_2|2|4
    rt_9_3|4|1
    rt_9_4|4|1
    rt_9_5|4|1

    Ich möchte dort jetzt immer die Werte der 5 items aufaddieren (also rt_3* und rt_9), leider bekomme ich die Schleife einfach nicht hin.

    Das habe ich bisher:

    $summeratings = array(); (?)
    $resultratingall = mysql_query("SELECT * FROM rtgitemssum", $db);
    while($row3 = mysql_fetch_array($resultratingall)) {
    $item = $row3["item"];
    $totalrate = $row3["totalrate"];
    $nrrates = $row3["nrrates"];
    // id extrahieren
    $item_array = explode("_",$item);
    $fid = $item_array[1];
    $unterkriterium = $item_array[2];
    echo $fid." : ".$unterkriterium." : ".$totalrate." : ".$nrrates."<br>";

    #for($i=1; $i = 5; $i++) {
    # $totalrategesamt = ?
    # array??
    #}
    echo "Summe: ".$totalrategesamt;

    Das ERgebnis sollte dann also z.B. für rt_3* und der ersten spalte sein: 4+4+4+3+4

    Ich bekomme es nicht hin, ich habe wirklich zig Seiten gelesen, meist wird da aber nur vom Aufsummieren einer ganzen Apalte gesprochen was ja mit sum(feld) einfach ist.

    Danke.

  • #2
    Dazu benötigst du nichtmal PHP:

    Code:
    SELECT SUM(`totalrate`) as `sum` FROM `items` WHERE `item` LIKE 'rt_3_%';
    Code:
    +------+
    | sum  |
    +------+
    |   19 |
    +------+
    1 row in set (0.00 sec)

    Kommentar


    • #3
      Willkommen im Forum!

      Damit Du hier nicht mit dem falschen Fuß einsteigst beherzige bitte diesen Thread.
      Wichtige Punkte:
      • Wir helfen gern, wenn Du Initiative zeigst. Macht mal ist nicht.
      • Bitte benutze die Code-Box-Buttons und poste relevanten Code.
      • Bitte stelle verständliche Fragen in ordentlicher Sprache. Sei prägnant!
      • Bitte verwende für spätere Leser einen Threadtitel, der das Problem kurz beschreibt
      • Bitte drängle nicht.
      • Bitte markiere abgeschlossene Themen über den "Erledigt"-Link oben links.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        Aha, danke, ja der SELECT ist mir relativ klar, nur wie bekome ich das in eine Schleife verpackt. So nimmt er ja nur die Einträge mit der ID3.

        Kann ich dann einfach aussen drum rum eine for schleife nehmen und dann alle zahlen durchgehen?

        ich wollte das etwas eleganter lösen...

        Kommentar


        • #5
          @Chris.: Er will - so verstehe ich das - das nicht nur für rt_3_% - das war nur ein Beispiel.

          @phpstarter: Kannst du die Struktur der Tabelle ändern? Dann zerleg doch "rt_X_Y" in zwei eigene Felder, eines für X und eines für Y. Dann könnte man über diese beiden Felder gruppieren und innerhalb der Gruppe summieren. - und das alles innerhalb von SQL.

          Kommentar


          • #6
            Zitat von phpstarter Beitrag anzeigen
            Aha, danke, ja der SELECT ist mir relativ klar, nur wie bekome ich das in eine Schleife verpackt. So nimmt er ja nur die Einträge mit der ID3.

            Kann ich dann einfach aussen drum rum eine for schleife nehmen und dann alle zahlen durchgehen?

            ich wollte das etwas eleganter lösen...
            Du hast zwei Möglichkeiten:
            1. Falls dir bereits bekannt ist, welche Summen du genau haben möchtest, dann hast du den Query nur zu erweitern.
            2. Sind die Summen von Fall zu Fall unterschiedlich, so könntest du den Query per PHP in eine Schleife setzen und ihn individuell gestalten. Eigentlich hast du ja lediglich nur die Drei im Namen des Items mit einer anderen Zahl zu ersetzen. Das sollte kein Problem darstellen. Eine gute Datenbankstruktur ist dies allerdings nicht, wie bereits von monolith zum Ausdruck gebracht.

            Kommentar


            • #7
              @phpstarter: Kannst du die Struktur der Tabelle ändern? Dann zerleg doch "rt_X_Y" in zwei eigene Felder, eines für X und eines für Y. Dann könnte man über diese beiden Felder gruppieren und innerhalb der Gruppe summieren. - und das alles innerhalb von SQL.

              ach ja... klar, da das über einen cron importierte Daten sind, könnte ich diese auch gleich getrennt speichern. Ok ich werd das mal versuchen.

              Ich habe es jetzt erstmal so gelöst:
              Code:
              for($i=1; $i = 50; $i++) {
                $resultratingall = mysql_query("SUM(totalrate) AS totalratesfinal, SUM(nrrates) AS nrratesfinal FROM rtgitemssum WHERE `item` LIKE 'rt_".$i."_%';", $db);
                while($row3 = mysql_fetch_array($resultratingall)) {
                  $item = $row3["item"];
                  $totalrate = $row3["totalrate"];
                  $nrrates = $row3["nrrates"];
                  // Fahrzeugid extrahieren
                  $item_array = explode("_",$item);
                  $fid = $item_array[1];
                  $unterkriterium = $item_array[2];
                  echo $fid." : ".$unterkriterium." : ".$totalrate." : ".$nrrates."<br>";
                }
              }
              Die 50 sind natürlich einfach so angegeben, die müsste ich vorher auch noch abfragen... oder ich versuche eure Lösung... danke schonmal.

              Kommentar


              • #8
                oh gott... mein Lösung geht ja gar nicht, der benötigt ewig fürs Durchlaufen. Dann werd ich das jetzt sauberer speichern.

                Kommentar


                • #9
                  Zitat von monolith Beitrag anzeigen
                  Dann könnte man über diese beiden Felder gruppieren und innerhalb der Gruppe summieren. - und das alles innerhalb von SQL.
                  Ähm, gruppieren ist klar, aber wie kann ich denn innerhalb der Gruppe summieren?

                  Momentan ist der MySQL:
                  Code:
                  SELECT SUM(totalrate) AS totalratesfinal, SUM(nrrates) AS nrratesfinal FROM rtgitemssum GROUP BY fid
                  Danke.

                  Kommentar


                  • #10
                    ach, war schon korrekt mein SELECT. Triotzdem Danke.

                    Kommentar

                    Lädt...
                    X