Avatar billede lsskaarup Nybegynder
20. maj 2005 - 09:05 Der er 3 kommentarer og
1 løsning

Problemer med forespørgelse

Jeg har en træls problem, for at sige det på godt jysk. Det er først blevet oprettet under MySQL, fordi jeg troede at det var queryen som ikke virkede, men det er siden vist sig ikke være sandt.

Jeg har nogle statistikker som ikke stemmer overens. Nå, men det er jo nok fordi queryen ikke passer, tænker I nok. Problemet er bare at statistikkerne kan specificeres for en enkelt land, og for alle minus et virker det godt nok.

Situationen er som følger. Jeg har en ordreindgang, som viser oplysninger om ordrene f.eks. efter land. Her viser den korrekt for alle lande (DK, S, N, CH, Ø, D).

En anden statistik, årsopgørelse, viser så alle ordre samt summere deres værdier, for igen f.eks. hvert land fordelt pr. måned. Det mærkelige er så at her bliver alle lande vist korrekt, bort set fra CH (Schweiz)...?

Hele koden er her:
<?php
    require('system/global_defs.php');
   
    include('static/kunde.php');

    setlocale(LC_ALL, 'da_DK');

    // TOTAL STATISTIK
    if (isset($_POST['submitTotal'])) {
        $titel = "bla bla";
        $where = "";
    }

    // GEOGRAFISK STATISTIK
    else if (isset($_POST['submitGeografi'])) {
        $titel = $_POST['land'];
        if ($_POST['land'] != "Øvrige") {
            $where = "&& land = '" . $_POST['land'] . "'";
        }
        else {
            $where = "&& land NOT IN ('" . implode("','", $GEOGRAFI) . "') ";
        }
    }


    $year = $_POST['regnskabsaar'];
    list($startdato,$slutdato) = explode("-", $year);
    $startdato = $startdato ."-07-01";
    $slutdato = $slutdato ."-07-01";

    $skema = array();
    $skema[0][0] = "<td rowspan=\"2\">Måned</td>";
    $skema[0][1] = "<td rowspan=\"2\">Antal ordrer</td>";
    $skema[0][2] = "<td rowspan=\"2\">Ordresum</td>";
    $skema[0][3] = "<td rowspan=\"2\">Stålpris</td>";
    $skema[0][4] = "<td rowspan=\"2\">Tonnage kg</td>";
    $skema[0][5] = "<td rowspan=\"2\">Kr./kg</td>";
    $skema[0][6] = "<td rowspan=\"2\">Fortjeneste</td>";
    $skema[0][7] = "<td rowspan=\"2\">DB %</td>";
    $skema[0][8] = "<td rowspan=\"2\">Budget tkr</td>";
    $skema[0][9] = "<td rowspan=\"2\">Budgetafv. tkr.</td>";
    $skema[0][10] = "<td colspan=\"2\">Hitrate %</td>";
    $skema[1][0] = "<td>Ordre</td>";
    $skema[1][1] = "<td>Oms.</td>";

//Data om tilbud bruges til udregning hitrate
$sql = "SELECT month(r526b) as maaned, COUNT(*) as antal, sum(r504) as `sum` FROM (SELECT tilbud, MAX(rev) as rev FROM tilbud GROUP BY tilbud) as t, tilbud, tilbud0, tilbud5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE t.tilbud = tilbud.tilbud && t.rev = tilbud.rev && tilbud.id = tilbud0.tilbudsnummer && tilbud0.tilbudsnummer = tilbud5.tilbudsnummer && r526b >= '$startdato' && r526b < '$slutdato' && r526a='1' $where GROUP BY month(r526b) ORDER BY maaned";
//$sql = "SELECT month(r526b) as maaned, count(*) as antal, sum(r504) as `sum` FROM (SELECT tilbud, MAX(rev) as rev FROM tilbud GROUP BY tilbud) as t, tilbud, tilbud0, tilbud5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE t.tilbud = tilbud.tilbud && t.rev = tilbud.rev && tilbud.id = tilbud0.tilbudsnummer && tilbud0.tilbudsnummer = tilbud5.tilbudsnummer && r4 >= '$startdato' && r4 < '$slutdato' $where GROUP BY maaned ORDER BY maaned";

$res = mysql_query($sql) or die($sql);
while ($row = mysql_fetch_row($res)) {
  $tilbud[$row[0]]['antal'] = $row[1];
  $tilbud[$row[0]]['sum'] = $row[2];
}

// Finder de nødvendige data til tabellen
// $sql = "SELECT month(oprettet) as maaned, count(*) as antal, sum(r504) as ordresum, sum(r477a) as staalpris, sum(r477) as tonnage, sum(r503) as fortjeneste, avg(r502) as db, 'test' as budget, 'test' as budgetafv FROM ordre, ordre0, ordre4, ordre5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE ordre.id = ordre0.tilbudsnummer && ordre0.tilbudsnummer = ordre4.tilbudsnummer && ordre4.tilbudsnummer = ordre5.tilbudsnummer && oprettet >= '$startdato' && oprettet < '$slutdato' $where GROUP BY maaned ORDER BY oprettet";

echo  $sql = "SELECT month( r572a ) AS maaned, count( * ) AS antal, sum( r504 ) AS ordresum, sum( r477a ) AS staalpris,
        sum( r477 ) AS tonnage, avg( r509 ) AS krkg, sum( r503 ) AS fortjeneste, avg( r502 ) AS db,
        'test' AS budget, 'test' AS budgetafv
    FROM (SELECT ordre, MAX( rev ) AS rev FROM ordre GROUP BY ordre) AS o,ordre, ordre0, ordre4, ordre5
    LEFT JOIN kunde ON kunde_hidden = kunde.id
    WHERE o.ordre = ordre.ordre && o.rev = ordre.rev && ordre.id = ordre0.tilbudsnummer &&
        ordre0.tilbudsnummer = ordre4.tilbudsnummer && ordre4.tilbudsnummer = ordre5.tilbudsnummer &&
        r572a >= '2004-07-01' && r572a < '2005-07-01' && ( ordre5.r534b !=1 || ordre5.r534b IS NULL ) &&
        r534a != 1 && (r526n IS NULL || r526n = '0') $where
    GROUP BY maaned
    ORDER BY maaned";
echo "<br>";
//die($sql);

$res = mysql_query($sql) or die($sql);

$ordresum = array();
while ($row = mysql_fetch_array($res)) {
//while ($row = mysql_fetch_row($res)) {
if ($row['maaned'] > 6) {
    $maaned = $row['maaned']-5;
} else {
    $maaned = $row['maaned'] + 7;
}
$ordresum[$maaned] = $row[2];

//Formatering af værdier derefter input til skema-arrayet
for($i = 0; $i < count($row); $i++) {
        echo ucfirst(strftime("%b", mktime(0,0,0,$row[$i], 1, 2000)));echo "<br>";
      if ($i == 0) {//Navnet må måned
        $skema[$maaned][$i] = "<td align=\"right\">" . ucfirst(strftime("%b", mktime(0,0,0,$row[$i], 1, 2000))) . "</td>";
        } else if (($i >= 2 && $i <=4) || $i == 6) {//ordresum, staalpris, tonnage og fortjeneste
        $skema[$maaned][$i] = "<td align=\"right\">" . number_format($row[$i], 0, '', '.') . "</td>";
        } else if ($i == 5) {//krkg
       
        //Hvis der skulle være en ordre, som ikke har fået nogle konstruktioner endnu, og der køres en statistik, kommer fejlen division med 0, fordi der simpelthen ikke er nogle tonnage endnu.
        if($row[4]==0){
            $row[4]=1;
        } else {
            $row[4]=$row[4];
        }

        $skema[$maaned][$i] = "<td align=\"right\">" . number_format($row[3]/$row[4], 2, ',', '') . "</td>";//Stålpris divideret med tonnage
        } else if ($i == 7) {//db
        $skema[$maaned][$i] = "<td align=\"right\">" . number_format(($row[$i-1]/$row[$i-5])*100, 1, ',', '.') . "</td>";
    } else {//antal, budget tkr, budgetafv. tkr, hitrate
        $skema[$maaned][$i] = "<td align=\"right\">" . $row[$i] . "</td>";
    }
  }

  //Formatering og udregning af hitrate
  if ($tilbud[$row[0]]['antal'] == 0) {
    $skema[$maaned][10] = "<td align=\"right\">0,0</td>";
  } else {
    $facit = $row[antal]/$tilbud[$row[0]]['antal']*100;
    $skema[$maaned][10] = "<td align=\"right\">" . number_format($facit, 1, ',', '.') . "</td>";
  }
  if ($tilbud[$row[0]]['sum'] == 0) {
    $skema[$maaned][11] = "<td align=\"right\">0,0</td>";
  } else {
    $facit = $row[ordresum]/$tilbud[$row[0]]['sum']*100;
    $skema[$maaned][11] = "<td align=\"right\">" . number_format($facit, 1, ',', '.') . "</td>";
  }
}

$budgetsql = "SELECT MONTH(maaned) as maaned, SUM(`sum`) as sum FROM budgetordre WHERE maaned >= '$startdato' && maaned < '$slutdato' $where GROUP BY maaned ORDER BY maaned";
$res = mysql_query($budgetsql) or die($budgetsql);
while ($row = mysql_fetch_assoc($res)) {
    if ($row['maaned'] > 6) {
        $maaned = $row['maaned']-5;
    } else {
        $maaned = $row['maaned'] + 7;
    }
    $skema[$maaned][8] = "<td align=\"right\">" . number_format($row['sum'], 0, '', '.') . "</td>";
//$skema[$maaned][8] = "<td>" . $row['sum'] . "</td>";
    $skema[$maaned][9] = "<td align=\"right\">" . number_format($ordresum[$maaned]-($row['sum']*1000), 0, '', '.') . "</td>";
}




$sql = "SELECT count(*) as antal, sum(r504) as `sum` FROM (SELECT tilbud, MAX(rev) as rev FROM tilbud GROUP BY tilbud) as t, tilbud, tilbud0, tilbud5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE t.tilbud = tilbud.tilbud && t.rev = tilbud.rev && tilbud.id = tilbud0.tilbudsnummer && tilbud0.tilbudsnummer = tilbud5.tilbudsnummer && r4 >= '$startdato' && r4 < '$slutdato' $where";
$res = mysql_query($sql) or die($sql);;
list($tilbud_antal, $tilbud_sum) = mysql_fetch_array($res);
// Finder total værdierne

// udtræk af total
$sql = "SELECT 'Total', count(*) as antal, sum(r504) as ordresum, sum(r477a) as staalpris, sum(r477) as tonnage, avg(r509) as krkg, sum(r503) as fortjeneste, avg(r502) as db, 'test' as budget, 'test' as budgetafv, 'test' as ordreprocent, 'test' as omsprocent FROM (SELECT ordre, MAX(rev) as rev FROM ordre GROUP BY ordre) as o, ordre, ordre0, ordre4, ordre5 LEFT JOIN kunde ON kunde_hidden = kunde.id WHERE o.ordre = ordre.ordre && o.rev = ordre.rev && ordre.id = ordre0.tilbudsnummer && ordre0.tilbudsnummer = ordre4.tilbudsnummer && ordre4.tilbudsnummer = ordre5.tilbudsnummer && r572a >= '$startdato' && r572a < '$slutdato' $where";

$res = mysql_query($sql) or die($sql);

$row = mysql_fetch_array($res);
$ordre_antal = $row[1];
$ordre_sum = $row[ordresum];
//Formatering af total linien, se eventuelt formateringen af de andre rækker
for($i = 0; $i < count($row); $i++) {
  if (($i >= 2 && $i <=4) || $i == 6) {
    $row[$i] = number_format($row[$i], 0, '', '.');
  } else if ($i == 5) {
    $row[$i] = number_format($row[$i-2]/$row[$i-1], 2, ',', '');
  } else if ($i == 7) {
    $row[$i] = number_format($row[fortjeneste]/$row[ordresum]*100, 1, ',', '');
  }
  $skema[14][$i] = "<td align=\"right\">" . $row[$i] . "</td>";
}

if ($tilbud_antal == 0) {
    $skema[14][10] = "<td align=\"right\">0,0</td>";
} else {
  $facit = $ordre_antal/$tilbud_antal*100;
  $skema[14][10] = "<td align=\"right\">" . number_format($facit, 1, ',', '.') . "</td>";
}
//if ($row[2] == 0) $skema[14][11] = "<td>0,0</td>";
//else $skema[14][11] = "<td align=\"right\">" . ($tilbud_sum*100/$row[2]) . "</td>";
if ($tilbud_sum == 0) {
    $skema[14][11] = "<td>0,0</td>";
} else {
  $facit = $ordre_sum/$tilbud_sum*100;
  $skema[14][11] = "<td align=\"right\">" . number_format($facit, 1, ',', '.') . "</td>";
}

$budgetsql = "SELECT SUM(`sum`) as sum FROM budgetordre WHERE maaned >= '$startdato' && maaned < '$slutdato' $where";
$res = mysql_query($budgetsql) or die($budgetsql);
list($totalbudget) = mysql_fetch_row($res);
$skema[14][8] = "<td align=\"right\">" . number_format($totalbudget, 0, '', '.') . "</td>";
$skema[14][9] = "<td align=\"right\">" . number_format($ordre_sum-($totalbudget*1000), 0, '', '.') . "</td>";

?>

<html>
<head>
<title>Årsopgørelse for <?php echo $titel; ?></title>
</head>
<body>
<h1>Årsopgørelse for <?php echo $titel; ?></h1>
<h2>for regnskabsåret <?php echo $year; ?></h2>
<table border="1">
<?php

    for ($i = 0; $i < count($skema); $i++) {
        echo "<tr>\n";
        for ($j = 0; $j < 12; $j++) {
            if ($i == 0 && $j == 10) {
                $j == 12;
            }
            if ($i == 1 && $j == 1) {
                $j == 12;
            }
            if (!isset($skema[$i][$j]) && $i > 1) {
                echo "<td>&nbsp;</td>";
            }
            echo $skema[$i][$j] . "\n";
        }
        echo "</tr>\n";
    }
?>

</table>
<p>
<input type="button" onClick="window.print();" value="Print">
</p>
</body>
Avatar billede lsskaarup Nybegynder
20. maj 2005 - 09:41 #1
Hmm, her hvor query-resultatet lægge i arrayet, er værdier godt nok med.

//Formatering af værdier derefter input til skema-arrayet
for($i = 0; $i < count($row); $i++) {
      if ($i == 0) {//Navnet må måned
        $skema[$maaned][$i] = "<td align=\"right\">" . ucfirst(strftime("%b", mktime(0,0,0,$row[$i], 1, 2000))) . "</td>";
        } else if (($i >= 2 && $i <=4) || $i == 6) {//ordresum, staalpris, tonnage og fortjeneste
        $skema[$maaned][$i] = "<td align=\"right\">" . number_format($row[$i], 0, '', '.') . "</td>";
        } else if ($i == 5) {//krkg
       
        //Hvis der skulle være en ordre, som ikke har fået nogle konstruktioner endnu, og der køres en statistik, kommer fejlen division med 0, fordi der simpelthen ikke er nogle tonnage endnu.
        if($row[4]==0){
            $row[4]=1;
        } else {
            $row[4]=$row[4];
        }

        echo $skema[$maaned][$i] = "<td align=\"right\">" . number_format($row[3]/$row[4], 2, ',', '') . "</td>";//Stålpris divideret med tonnage
        } else if ($i == 7) {//db
        $skema[$maaned][$i] = "<td align=\"right\">" . number_format(($row[$i-1]/$row[$i-5])*100, 1, ',', '.') . "</td>";
    } else {//antal, budget tkr, budgetafv. tkr, hitrate
        $skema[$maaned][$i] = "<td align=\"right\">" . $row[$i] . "</td>";
    }
  }
Avatar billede lsskaarup Nybegynder
20. maj 2005 - 09:46 #2
Okay, koden for til sidste udskriver selve tabellen/arrayet løber ikke igennem de antal gange den skal, når det er Schweiz

<?php

    for ($i = 0; $i < count($skema); $i++) {
        echo "<tr>\n";
        for ($j = 0; $j < 12; $j++) {
            if ($i == 0 && $j == 10) {
                $j == 12;
            }
            if ($i == 1 && $j == 1) {
                $j == 12;
            }
            if (!isset($skema[$i][$j]) && $i > 1) {
                echo "<td>&nbsp;</td>";
            }
            echo $skema[$i][$j] . "\n";
        }
        echo "</tr>\n";
    }
?>

Jeg prøve at ændre count($skema); til 15, og så kom alle resultater med. Hvor mon den fejl kommer fra.
Avatar billede lsskaarup Nybegynder
02. juni 2005 - 11:22 #3
Hallo
Avatar billede lsskaarup Nybegynder
16. juni 2005 - 08:20 #4
Nå ingen hjælp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester