07. august 2007 - 12:42Der er
32 kommentarer og 1 løsning
problemmer med query´s og sammetælling
Jeg har lavet nederstående query's, det ser langt fra godt ud og det kan med garanti skrives både mere enkelt og kønnerer , men de virker - næsten! Jeg får vist mine forspørgelser, men når jeg vil beregne lidt på dem går det galt, skal beregningen måske ske i php? og hvordan?
Jeg vil også gerne have trukket resultatet med over i min udskriftvenlige popup side, Det kan jeg heller ikke få til at lykkes.
Jeg har bakset med det en uge nu, og gennemsøgt manualer og paneler, uden held. Så jeg vil være tilfreds med et script der virker, og så pyt med det kunstneriske indtryk :-)
Er der der kan hjælpe? -- Når i er færdige med at grine af mit egnet forsøg!
//Henter forespørgelse på indtægter $sum_20 = mysql_result(mysql_query("SELECT SUM(`ind_b` + `ind_k`) FROM 20_kontingent WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_22 = mysql_result(mysql_query("SELECT SUM(`ind_b` + `ind_k`) FROM 22_deltagerbetaling WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_24 = mysql_result(mysql_query("SELECT SUM(`ind_b` + `ind_k`) FROM 24_sponsering WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_26 = mysql_result(mysql_query("SELECT SUM(`ind_b` + `ind_k`) FROM 26_andre_lokalforeninger WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); //--- DUER IKKE! $sum_ind = mysql_result(mysql_query("SELECT SUM(`ind_b` + `ind_k`) FROM 26_andre_lokalforeninger + SELECT SUM(`ind_b` + `ind_k`) FROM 24_sponsering + SELECT SUM(`ind_b` + `ind_k`) FROM 22_deltagerbetaling + SELECT SUM(`ind_b` + `ind_k`) FROM 20_kontingent + SELECT SUM(`ind_b` + `ind_k`) FROM 40_rente_gebyr WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0);
//Henter forespørgelse på udgifter $sum_30 = mysql_result(mysql_query("SELECT SUM(`ud_b` + `ud_k`) FROM 30_bestyrelsesmøder WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_32 = mysql_result(mysql_query("SELECT SUM(`ud_b` + `ud_k`) FROM 32_foreningsmøder_foredrag WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_34 = mysql_result(mysql_query("SELECT SUM(`ud_b` + `ud_k`) FROM 34_rejser WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_36 = mysql_result(mysql_query("SELECT SUM(`ud_b` + `ud_k`) FROM 36_kontor WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_38 = mysql_result(mysql_query("SELECT SUM(`ud_b` + `ud_k`) FROM 38_repræsentation WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); //--- DUER IKKE! $sum_ud = mysql_result(mysql_query("SELECT SUM(`ud_b` + `ud_k`) FROM 38_repræsentation + SELECT SUM(`ud_b` + `ud_k`) FROM 36_kontor + SELECT SUM(`ud_b` + `ud_k`) FROM 34_rejser + SELECT SUM(`ud_b` + `ud_k`) FROM 32_foreningsmøder_foredrag + SELECT SUM(`ud_b` + `ud_k`) FROM 30_bestyrelsesmøder + SELECT SUM(`ud_b` + `ud_k`) FROM 40_rente_gebyr WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); //forskel mellem $sum_ind og $sum_ud //???
//Henter forespørelse på renter og gebyr $sum_40i = mysql_result(mysql_query("SELECT SUM(`ind_b` + `ind_k`) FROM 40_rente_gebyr WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_40u = mysql_result(mysql_query("SELECT SUM(`ud_b` + `ud_k`) FROM 40_rente_gebyr WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); //Henter forespøgelse på bank og kasse $sum_b = mysql_result(mysql_query("SELECT SUM(`ind_b` - `ud_b`) FROM 10_bank WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); $sum_k = mysql_result(mysql_query("SELECT SUM(`ind_k` - `ud_k`) FROM 15_kasse WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"), 0); //$sum_b + $sum_k //???
echo"Fra $dato1 Til $dato2<br>Kontingent $sum_20<br>Deltagerbetaling $sum_22<br>Sponsering $sum_24<br>Andre lokalforeninger $sum_26<br> Indtægter Ialt $sum_ind<br><br> Bestyrelsesmøder $sum_30<br>Foreningsmøder og foredrag $sum_32<br>Rejser $sum_34<br>Kontor $sum_36<br>Repræsentation $sum_38<br> Renter ind $sum_40i<br>Renter ud $sum_40u<br>Bank ind - ud $sum_b<br>Kasse ind - ud $sum_k<br>";
Det er det lige nøjagtigt.. Du kan vidst skrive hvad du vil efter tabelnavnet som alias, jeg kan dog ikke huske om det kan lade sig gøre med tal alene eller om det _skal_ være bogstaver så det kan være at du skal prøve med nogle andre aliaser..
eller måske er det nok nærmere at du skal ind og skrive 38.dato BETWEEN osv for alle tabellerne...
Nu har jeg prøve dette også, sluttede med den her. Der meldes stadig fejl på linie 91, som er $sum_ud = mysql_result($result,0);
$sql = "SELECT SUM(SUM(rep.ud_b + rep.ud_k)+SUM(kon.ud_b + kon.ud_k)+SUM(rej.ud_b + rej.ud_k)+SUM(mod.ud_b + mod.ud_k)+SUM(bes.ud_b + bes.ud_k)+SUM(ren.ud_b + ren.ud_k)) FROM 38_repræsentation rep, WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' 36_kontor kon, WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' 34_rejser rej, WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' 32_foreningsmøder_foredrag mod, WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' 30_bestyrelsesmøder bes, WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' 40_rente_gebyr ren, WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' WHERE dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"; $result = mysql_query($sql); $sum_ud = mysql_result($result,0);
Prøv det her: $sql = "SELECT SUM(SUM(rep.ud_b + rep.ud_k)+SUM(kon.ud_b + kon.ud_k)+SUM(rej.ud_b + rej.ud_k)+SUM(mod.ud_b + mod.ud_k)+SUM(bes.ud_b + bes.ud_k)+SUM(ren.ud_b + ren.ud_k)) FROM 38_repræsentation rep, 36_kontor kon, 34_rejser rej, 32_foreningsmøder_foredrag mod, 30_bestyrelsesmøder bes, 40_rente_gebyr ren WHERE rep.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND kon.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND rej.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND mod.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND bes.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND ren.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"; $result = mysql_query($sql); $sum_ud = mysql_result($result,0);
hmm det skulle den godt nok.. kan du ikke prøve at rette den her linie: $result = mysql_query($sql); til det her: $result = mysql_query($sql) or die("<pre>$sql</pre>".mysql_error());
Og her er svaret: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mod, 30_bestyrelsesmøder bes, 40_rente_gebyr
SELECT SUM(SUM(rep.ud_b + rep.ud_k)+SUM(kon.ud_b + kon.ud_k)+SUM(rej.ud_b + rej.ud_k)+SUM(mo.ud_b + mo.ud_k)+SUM(bes.ud_b + bes.ud_k)+SUM(ren.ud_b + ren.ud_k)) FROM 38_repræsentation rep, 36_kontor kon, 34_rejser rej, 32_foreningsmøder_foredrag mo, 30_bestyrelsesmøder bes, 40_rente_gebyr ren WHERE rep.dato BETWEEN '2007-07-01' AND '2007-08-31' AND kon.dato BETWEEN '2007-07-01' AND '2007-08-31' AND rej.dato BETWEEN '2007-07-01' AND '2007-08-31' AND mo.dato BETWEEN '2007-07-01' AND '2007-08-31' AND bes.dato BETWEEN '2007-07-01' AND '2007-08-31' AND ren.dato BETWEEN '2007-07-01' AND '2007-08-31'
Du får det lige til selv syn :-) Så vidt jeg kan se er der rettet alle steder.
$sql = "SELECT SUM(SUM(rep.ud_b + rep.ud_k)+SUM(kon.ud_b + kon.ud_k)+SUM(rej.ud_b + rej.ud_k)+SUM(mo.ud_b + mo.ud_k)+SUM(bes.ud_b + bes.ud_k)+SUM(ren.ud_b + ren.ud_k)) FROM 38_repræsentation rep, 36_kontor kon, 34_rejser rej, 32_foreningsmøder_foredrag mo, 30_bestyrelsesmøder bes, 40_rente_gebyr ren WHERE rep.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND kon.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND rej.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND mo.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND bes.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."' AND ren.dato BETWEEN '". $dato1 ."' AND '". $dato2 ."'"; $result = mysql_query($sql); $result = mysql_query($sql) or die("<pre>$sql</pre>".mysql_error());
hmm det kan evt. godt være fordi sum() ikke kan bruges på den måde..
Prøv det har: $sql = "SELECT SUM(rep.ud_b + rep.ud_k) as repraesentation, SUM(kon.ud_b + kon.ud_k) as kontor, SUM(rej.ud_b + rej.ud_k) as rejser, SUM(mo.ud_b + mo.ud_k) as foredrag, SUM(bes.ud_b + bes.ud_k) as bestyrelse, SUM(ren.ud_b + ren.ud_k) as rente FROM 38_repræsentation rep, 36_kontor kon, 34_rejser rej, 32_foreningsmøder_foredrag mo, 30_bestyrelsesmøder bes, 40_rente_gebyr ren WHERE rep.dato BETWEEN '2007-07-01' AND '2007-08-31' AND kon.dato BETWEEN '2007-07-01' AND '2007-08-31' AND rej.dato BETWEEN '2007-07-01' AND '2007-08-31' AND mo.dato BETWEEN '2007-07-01' AND '2007-08-31' AND bes.dato BETWEEN '2007-07-01' AND '2007-08-31' AND ren.dato BETWEEN '2007-07-01' AND '2007-08-31'"; $result = mysql_query($sql) or die("<pre>$sql</pre>".mysql_error()); while($row = mysql_fetch_assoc($result)) { $sum_ud = $row[repraesentation] + $row[kontor] + $row[rejser] + $row[foredrag] + $row[bestyrelse] + $row[rente]; }
echo"Fra $dato1 Til $dato2<br><br> Kontingent $sum_20<br>Deltagerbetaling $sum_22<br>Sponsering $sum_24<br>Andre lokalforeninger $sum_26<br>Renter ind $sum_40i<br> Indtægter Ialt $sum_ind<br><br> Bestyrelsesmøder $sum_30<br>Foreningsmøder og foredrag $sum_32<br>Rejser $sum_34<br>Kontor $sum_36<br>Repræsentation $sum_38<br>Renter ud $sum_40u<br> Udgifter Ialt $sum_ud<br><br> Bank ind - ud $sum_b<br>Kasse ind - ud $sum_k<br>";
Jeg sad og fedtede lidt med dine forslag i går aftes. I dit sidst forslag slutter du med denne linie: $sum_ud += $row[repraesentation] + $row[kontor] + $row[rejser] + $row[foredrag] + $row[bestyrelse] + $row[rente];
Så var det at jeg tænkte hvorfor alt det bøvl, alle de beregninger har jeg jo gjort en gang! (se mit start indlæg) Så prøvede jeg at om skrive den linie til dette her: { $sum_ud = $sum_30+$sum_32+$sum_34+$sum_36+$sum_38+$sum_40i; } Og slettede simpelthen resten - og Fa..... om ikke det virkede!!
Men det var med al respekt dig og dit arbejde der fik mig på rette spor, så du må gerne sende et svar.
Det kommer an på hvordan din vis_regnskab.php ser ud.. Hvis det er en fil der har den samme php-kode som det her så skulle det vel være nok at du sender datoerne med over..
noget i den her retning måske? echo "<br><script type='text/javascript'>window.open('vis_regnskab.php?dato1=$dato1&dato2=$dato2')</script></a><br>"; og så i vis_regnskab.php henter du de 2 datoer med $_GET[dato1] og $_GET[dato2]..
Det ser fint ud jeg. Bedre end det jeg har prøvet i hvertfald. Takker.
Du må gerne få alle point! Du kom måske i første omgang, ikke lige med en fiks og færdig kode, men jeg lært en del nyt.
All lærdom koster jo et eller andet sted noget :-)
Synes godt om
Ny brugerNybegynder
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.