Moses: Berechnung - Eleganter?

Hallo,
nein, das soll kein Doppelposting werden, aber auf den alten Thread kann ich nicht mehr schreiben. Es ging um Berechnungen von Quartalsergebnissen (mit der Problematik, daß es vorkommen kann, daß für einzelne Monate kein Umsatz vorliegt)
Ich habe mein Problem auch einigermaßen gelöst, allerdings würde ich gerne wissen, ob es nicht eine elegantere Lösung gibt...

$sql="select sum(Total) as total, year, month FROM TABELLE WHERE [div Bedingungen) GROUP BY year, month ORDER BY year, month";
$erg = mysql_query($sql);
if (!$erg) die("<br>Abfrage nicht erfolgreich");
else
{
while ($Aus=mysql_fetch_array($erg))
      {
        if ($Jahr !=$Aus["year"])
           {
             if ($umsatz1 !="")
             {
             echo "$datum1 - $umsatz1<br>";
             }
             if ($umsatz2 !="")
             {
             echo "$datum2 - $umsatz2<br>";
             }
             if ($umsatz3 !="")
             {
             echo "$datum3 - $umsatz3<br>";
             }
             if ($umsatz4 !="")
             {
             echo "$datum4 - $umsatz4<br>";
             }
            //--Variablen auf Null setzten
           $umsatz1=0;
           $umsatz2=0;
           $umsatz3=0;
           $umsatz4=0;
           }
         $Jahr=$Aus["year"];
         $ye=substr($Aus["year"],2);

if ($Aus["month"] ==1 || $Aus["month"]==2 || $Aus["month"]==3)
            {
            $datum1="Q1/$ye";
            $umsatz1=($umsatz1+$Aus["total"]);
            }
           if ($Aus["month"]==4 || $Aus["month"]==5 || $Aus["month"]==6)
           {
            $datum2="Q2/$ye";
            $umsatz2=($umsatz2+$Aus["total"]);
           }
           if ($Aus["month"]==7 || $Aus["month"]==8 ||$Aus["month"]==9)
           {
            $datum3="Q3/$ye";
            $umsatz3=($umsatz3+$Aus["total"]);
           }
           if ($Aus["month"]==10 || $Aus["month"]==11 || $Aus["month"]==12)
           {
           $datum4="Q4/$ye";
           $umsatz4=($umsatz4+$Aus["total"]);
           }

}
if ($umsatz1 !="")
{
echo "$datum1 - $umsatz1<br>";
}
if ($umsatz2 !="")
{
echo "$datum2 - $umsatz2<br>";
}
if ($umsatz3 !="")
{
echo "$datum3 - $umsatz3<br>";
}
if ($umsatz4 !="")
{
echo "$datum4 - $umsatz4<br>";
}

}

Wie gesagt so funktioniert es zwar, aber es erscheint mir recht umständlich. Hat jemand eine besseren Lösungsvorschlag?

Grüße,
Moses

  1. Hi,

    nein, das soll kein Doppelposting werden, aber auf den alten Thread kann ich nicht mehr schreiben.

    hm, das will ich zwar gerne akzeptieren, aber aus Neugier: Warum kannst Du dort nicht schreiben?

    Ich habe mein Problem auch einigermaßen gelöst, allerdings würde ich gerne wissen, ob es nicht eine elegantere Lösung gibt...

    a) Arrays.
    b) (Zu bevorzugen:) Nur eine Variable für den Umsatz, sowie eine für das Quartal, auf das sich dieser bezieht. Den Wechsel kannst Du leicht prüfen.

    if ($umsatz1 !="")

    Desweiteren sollte man Zahlen nicht gegen Strings prüfen. Das mag zwar funktionieren, ist aber grottenschlechter Stil. Die Variable hat jederzeit vom richtigen Typ zu sein.

    if ($Aus["month"] ==1 || $Aus["month"]==2 || $Aus["month"]==3)

    echo ($Aus['month']-1)/3 + 1;

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. hm, das will ich zwar gerne akzeptieren, aber aus Neugier: Warum kannst Du dort nicht schreiben?

      Weil der Thread schon ins Archiv gewandert ist, und meines wissens dann nicht mehr erweitert werden kann - lasse mich gerne eines besseren belehren....
      Ansonsten danke für die Tips!
      Grüße,
      Moses

      1. Hi,

        hm, das will ich zwar gerne akzeptieren, aber aus Neugier: Warum kannst Du dort nicht schreiben?
        Weil der Thread schon ins Archiv gewandert ist,

        ach so, ich dachte, er wäre noch in der Hauptdatei. Dann ist es klar.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes