SUM in klar definierter Abfrage

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SUM in klar definierter Abfrage

    Hallo,

    ich habe nun schon einiges gescripted, aber bei einem Problem komme ich echt ins schleudern. Hoffentlich habt Ihr da eine Idee.

    Also, mein Script soll die Summe von Werten in einem ganz bestimmten Bereich zusammenzählen. Das Script zu meinem Grundgedanken würde so aussehen:
    PHP-Code:
    <?
    $sql = "SELECT SUM(eingang_taschengeld) AS eingang FROM taschengeld WHERE datum LIKE '$jahr-$monat-%' ORDER BY datum LIMIT 10";
        $result = mysql_query($sql) or die ("Fehler: <br />" . mysql_error());

        while($tg=mysql_fetch_assoc($result))

        {
    $bestand = ($tg['eingang']); }

    // ein paar Zeilen später

    echo"Du hast in den letzten 10 Tagen $bestand EUR Taschengeld erhalten";
    ?>
    Aber irgendwie möchte das nicht so recht funktionieren. Hat da jemand eine Idee?

    LG blaster16

  • #2
    Aber irgendwie möchte das nicht so recht funktionieren.
    Was heißt das?

    Kommentar


    • #3
      Hallo,

      die derzeitige Fehlermeldung lautet
      Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
      ich habe es aber auch schon mal hinbekommen, das er mir einen vernünftigen Wert ausgespuckt hat. Allerdings war dies nur der letzte Wert aus der Tabelle der Abfrage.

      LG blaster16

      //EDIT:
      Die neue Fahlermeldung (hatte da einen Spaltennamen zuviel drin stehen) lautet, das er mir diesen Wert nicht anzeigt.

      Kommentar


      • #4
        Original geschrieben von blaster16
        Die neue Fahlermeldung (hatte da einen Spaltennamen zuviel drin stehen) lautet, das er mir diesen Wert nicht anzeigt.
        Also im Original "I not gonna show you this value ('cause I don't like you)" - oder wie oder was?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          So ungefähr Aber was soll ich tun, damit das Script mich nun doch mag?

          Also, lasse ich das "LIMIT 10" weg, dann funktioniert es erstaunlicherweise. Aber da ich ja nur die letzten 10 Einträge summiert haben möchte, hilft mir das ja auch nicht weiter, oder?

          Kommentar


          • #6
            Vielleicht etwas schwierig für einen Schüler.

            Code:
            SELECT sum(eingang_taschengeld) AS eingang 
                FROM taschengeld 
                WHERE datum >= DATE(NOW()) - INTERVAL 10 DAYS
            Es kommt noch drauf an, was man genau summieren will. Obiges ist für die letzten 10 Tage.
            Falls es die letzten 10 Tage, nur in diesem Monat sein sollte, ist die WHERE-Bedingung etwas anders.
            Falls es dieser Monat sein sollte, ist die WHERE-Bedingung wie Du es hattest.

            Falls es nur die letzten 10 Einträge sein sollen, egal welche Tage, geht das auch(subquery)
            Zuletzt geändert von tcpip; 27.06.2006, 16:07.

            Kommentar


            • #7
              Mmmmmhhhhhhh ... das trifft es leider auch noch nicht so ganz. Hintergrund des Scriptes ist das Anfertigen eines "Kassenbuches", welches man als Kleinunternehmer führen und am Jahresende dem Finanzamt geben muß. Die Abfragen, die ich dann an einen PDF-Creator weiterreiche, funktionieren ja alle auch einwandfrei. Nur wenn ich eben dabei bin, die zweite Seite auszugeben, brauche ich den Übertragswert von der vorherigen Seite. Diese Übertragswerte soll die Abfrage kurzerhand errechnen. Also so:
              PHP-Code:
              <?

              // die Vorauswahl geholt durch ein Vor-Formular, aus welchem Monat/Jahr die Buchungen gewertet und gedruckt werden sollen
              $jahr = '2006';
              $monat = '06';

              // Hier "LIMIT 27" weil die ersten 27 Buchungen auf der ersten Seite erscheinen und auf Seite 2 als Übertrags-Werte gelistet werden sollen

              $sql = "SELECT sum(eingang_brutto) AS ein_brutto, sum(ausgang_brutto) AS aus_brutto FROM addon_buchhaltung WHERE datum LIKE '$jahr-$monat-%' ORDER BY beleg LIMIT 27";
                  $result = mysql_query($sql) or die ("Fehler: <br />" . mysql_error());

                  while($ueber=mysql_fetch_assoc($result))

                  {
              $ein_brutto = ($ueber['ein_brutto']);
              $aus_brutto = ($ueber['aus_brutto']);
                  }
              Die Werte werden dann später im PDF-Dokument durch die Variablen übernommen.

              Ich könnte die Ausgabe der Werte ja auch später erst in einem array zusammenfassen und dann mit der Funktion sum_array addieren. Aber dafür bin ich wieder zu blöd... wie zum Geier soll ich die ganzen Werte von der Variable $ein_brutto (wenn das SUM jetzt in der Abfrage nicht wäre) in das Array quetschen? Mit
              PHP-Code:
              $blubb = array($ein_brutto
              ist es ja leider auch nicht mal eben getan.

              Kommentar


              • #8
                es wird sogar mit dieser komischer LIKE operator bei datum funktionieren(bei neuen mysql_versionen) aber auf group by kannst du leider nicht verzichten.
                als die hilfe würde ich dir vorschlagen in einem mysql-tutorial
                GROUP BY
                und
                LIMIT
                ansehen.
                Slava
                bituniverse.com

                Kommentar


                • #9
                  Ich denke das Problem mit den Ueberträgen ist sicher schon irgendeinmal gelöst worden.

                  Ohne selbst danach zu googeln, würde ich denken, dass es nicht mit sql zu behandeln ist, sogar wenn es irgendwie gehen würde. Zudem muss du dann auf Seite 2 unten die summe von Seite 1-2 haben, und auf Seite 3 oben den Vortrag von Seite 2.

                  Das Anliefern der Daten in Portionen von 27 Zeilen und monatsweise kann hingegen in sql gemacht werden. Wenn es nur eine Zeile pro Tag gibt, würde ich eine kleinere Schrift wählen und jeden Monat auf eine Seite schreiben.

                  Was es mit dem ersten Problem (summe der letzten 10 Tage) zu tun hat, weiss ich nicht.

                  Kommentar


                  • #10
                    genau ... irgendjemand wird dieses Problem bereits schon einmal gelöst, jedoch mir das Rezept noch nicht verraten haben

                    es wird sogar mit dieser komischer LIKE operator bei datum funktionieren(bei neuen mysql_versionen) aber auf group by kannst du leider nicht verzichten.
                    Sorry, aber es gibt dort nichts zu gruppieren, da alles mit einer fortlaufenden Belegnummer versehen ist, und diese ersteinmal sortiert werden muß. Und diese Kombi läuft auf meinen Rootservern leider nicht.

                    Ich habe mich langsam auch schon von dem Gedanken, alles nur in einer MySQL-Abfrage zu quetschen, verabschiedet und bin nun eher auf die Idee mit einem array gekommen. Das habe ich mir dann irgendwie so vorgestellt (leicht abgekupfert aus einem Gästebuchsystem):
                    PHP-Code:
                    <?

                    // gekürzte Experimentierfassung, mit der ich gerade nach der Lösung suche
                    $sql = "SELECT eingang_brutto FROM addon_buchhaltung WHERE datum LIKE '$jahr-$monat-%' ORDER BY beleg LIMIT 4";
                        $result = mysql_query($sql) or die ("Fehler: <br />" . mysql_error());

                        while($ueber=mysql_fetch_assoc($result))

                        {
                    $ueber_ein_b = ($ueber['eingang_brutto']);

                    $values.=",".addslashes($ueber_ein_b).""; 
                    $werteliste = array($values);
                    $summe = array_sum($werteliste); }

                    // später dann in der Übertragszeile

                    echo"$summe";
                    ?>
                    Doch schiebe ich das Script dann hoch, ist mein Ergebnis nach wie vor 0 ... zapfe ich die Variable $values an, bekomme ich die erwünschte Liste ",0,0,34.95,30" zurück, mit der ich dann später das array_sum ausführen möchte. Jedoch stört mich hier das Komma am Anfang ... hat hier jemand eine Idee?

                    Kommentar


                    • #11
                      wenn da nichts zu gruppieren ist, woher kommt dann
                      diese komische fehlermeldung
                      Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause

                      und o wau
                      mit arrays kommst du wohl auch nicht zu recht.
                      Zuletzt geändert von Slava; 27.06.2006, 19:27.
                      Slava
                      bituniverse.com

                      Kommentar


                      • #12
                        LOL ... ist doch schon wieder Schnee von gestern. Hatte doch zunächst versucht mit sum() zu arbeiten, dies aber bei den anderen Spalten vergessen.

                        Für mich sagt SUM allerdings "SUMmieren" und nicht "GROUPieren"

                        Kommentar


                        • #13
                          ja echt LOL!
                          ich beginne langsam verstehen, warum an diesem thread so viele Sternchen stehen.
                          Die Moderatoren wissen schon, dass hier gute Unterhaltung kommt.
                          Slava
                          bituniverse.com

                          Kommentar


                          • #14
                            Wenn ich recht gelesen habe, stand da "auch für Newbies" ... ich habe nie etwas anderes behauptet was mich und die Materie PHP angeht.

                            Aber hier ist ja auch scheinbar keiner zur Hilfe bereit ... so Leute, die nur auf Antworten klicken, damit die Anzahl an Posts steigt, sind keine wirkliche Hilfe.

                            Ich habe ja auch nur nach etwas Hilfe gebeten ... nicht nach 9-mal-klugen Sprüchen von so Möchtegern-Kiddies, die selber keinen Plan von der Materie haben. Und genau deswegen wurden diesem Thread auch die Sternchen zugewiesen ... um festzuhalten, das Ihr mindestens genauso wenig Plan vom Scripten habt wie ich. Nur mit dem einen Unterschied: Ich habe das Problem schon gelöst. Durch Experimente und Lernfähigkeit ... und nicht nur, um den Script-Kiddie raushängen und dumme Sprüche zu lassen.

                            Nein, wenn ich demnächst noch mal ein PHP-Problem habe, dann gehe ich wohl lieber in ein richtiges Männer-Forum ... da wo die auch Ahnung haben und die Inhalte (vor allem "auch für Anfänger") der Wahrheit entsprechen und man sich nicht von 13 jährigen, pickligen WBB-Template-fuschern anmachen lassen muß. Geht mal lieber in die Schule und macht Euren Eltern nicht so viel Kummer ... Baggerfahrer. O_o

                            Also: Problem gelöst. Thread kann geschlossen werden. Meinen Lösungsweg verrate ich hier nicht, weil ich so blöd angemacht wurde.

                            Kommentar


                            • #15
                              Nein!
                              diese Thread muss für die Evigkeit in diesem Forum für die Lernzwecke gespeichert werden
                              Slava
                              bituniverse.com

                              Kommentar

                              Lädt...
                              X