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> </td>";
}
echo $skema[$i][$j] . "\n";
}
echo "</tr>\n";
}
?>
</table>
<p>
<input type="button" onClick="window.print();" value="Print">
</p>
</body>
