20. maj 2005 - 08:37
Der er
2 kommentarer og
1 løsning
Problemer med forespørgelse
Jeg har en træls problem, for at sige det på godt jysk.
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)...?
Queryen er bygget op på den måde at i where-delen, er der en variabel, som henter landeværdien valgt af brugeren, den kan selvfølgelig også være alle lande. Det vil altså sige, at queryen er bygget ens op for alle forespørgelser med det er kun CH som fejler.
Databasestrukturen er lidt speciel, men skal I bruge den så skriv hvilke tabeller I gerne vil se.
Queryen se ud som denne.
I koden:
$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";
Og når den er blevet eksekveret, f.eks. med Schweiz som land:
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') && land = 'CH' GROUP BY maaned ORDER BY maaned