Avatar billede mibu Nybegynder
07. august 2007 - 12:42 Der 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!


KODE:

<?

                $dato1 = $_REQUEST["dato1"];
                $dato2 = $_REQUEST["dato2"];
               


//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>";

    echo "<br><script type='text/javascript'>window.open('vis_regnskab.php?id=$hvad_her')</script></a><br>";


?>
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 12:59 #1
Prøv med den her:
$sql = "SELECT
          SUM(SUM(38.ud_b + 38.ud_k)+SUM(36.ud_b + 36.ud_k)+SUM(34.ud_b + 34.ud_k)+SUM(32.ud_b + 32.ud_k)+SUM(30.ud_b + 30.ud_k)+SUM(40.ud_b + 40.ud_k))
        FROM
          38_repræsentation 38,
          36_kontor 36,
          34_rejser 34,
          32_foreningsmøder_foredrag 32,
          30_bestyrelsesmøder 30,
          40_rente_gebyr
        WHERE
          dato BETWEEN '". $dato1 ."'
          AND '". $dato2 ."'";
$result = mysql_query($sql);
$sum_ud = mysql_result($result,0);

Går ud fra at det er det du har udkommentere og skrevet DUER IKKE! som du skal have hjælp til..
Avatar billede mibu Nybegynder
07. august 2007 - 13:14 #2
Warning: mysql_result(): supplied argument is not a valid MySQL result resource in /------on line 91

Og linie 91 er : $sum_ud = mysql_result($result,0);
Avatar billede mibu Nybegynder
07. august 2007 - 13:19 #3
Det du gør her ved at skrive 38_repræsentation 38, er det en slags alias så du kan nøjes med at skrive 38.ud_b ?
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 14:24 #4
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...
Avatar billede mibu Nybegynder
07. august 2007 - 14:55 #5
Ok jeg prøver lige andre alias og dernæst kan jeg jo prøve dato rettelser.
Avatar billede mibu Nybegynder
07. august 2007 - 15:16 #6
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);
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 15:25 #7
der kan jeg se jeg har været lidt uklar..

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);
Avatar billede mibu Nybegynder
07. august 2007 - 15:28 #8
Hmm!

Warning: mysql_result(): supplied argument is not a valid MySQL result resource

Nu er det bare i linie 103 men stadig sidste linie
Avatar billede mibu Nybegynder
07. august 2007 - 15:33 #9
Tjekkede lige! køre med php 4, så funktionen skulle jo være der.
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 15:41 #10
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());

Jeg vil godt sikre mig at query'en er korrekt..
Avatar billede mibu Nybegynder
07. august 2007 - 15:46 #11
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
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 15:50 #12
hmm jeg tror mod er et "beskyttet" ord som du ikke må bruge..

Skift mod ud med et andet alias, evt "drag", og prøv igen
Avatar billede mibu Nybegynder
07. august 2007 - 15:54 #13
Okay jeg erstater "mod" med "mo" og får så den her:

Invalid use of group function
Avatar billede mibu Nybegynder
07. august 2007 - 16:00 #14
Eller rettere så for jeg hele dette:

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'

Invalid use of group function
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 16:00 #15
hvordan ser query'en ud?
Så vidt jeg kan se er der ikke nogen group by nogen steder.. og mo er vidst heller ikke et alias for group by...

Har du husket at ændre det alle de steder hvor der stod/står mod?
Avatar billede mibu Nybegynder
07. august 2007 - 16:03 #16
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());
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 16:10 #17
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];
}
Avatar billede mibu Nybegynder
07. august 2007 - 16:24 #18
Tja! dee meldes ikke fejl, - men den tæller helle ikke sammen. Der bare står 0, men det er da fremskridt :-) før stod der ingenting
Avatar billede mibu Nybegynder
07. august 2007 - 16:26 #19
Vent jeg fjols! Jeg skal jo lige skifte ud med $dato1 og $dato2
Avatar billede mibu Nybegynder
07. august 2007 - 16:30 #20
Nå! Det hjalp ikke
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 16:30 #21
prøv at ændre det her:
while($row = mysql_fetch_assoc($result)) {
  $sum_ud = $row[repraesentation] + $row[kontor] + $row[rejser] + $row[foredrag] + $row[bestyrelse] + $row[rente];
}

til det her:

while($row = mysql_fetch_assoc($result)) {
  $sum_ud += $row[repraesentation] + $row[kontor] + $row[rejser] + $row[foredrag] + $row[bestyrelse] + $row[rente];
}

Og sæt en $sum_ud = 0 ind lige før $sql = "SELECT...osv
Avatar billede mibu Nybegynder
07. august 2007 - 16:45 #22
Inden forskel, samme resultat.
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 16:49 #23
vi ændrer lidt igen..

while($row = mysql_fetch_assoc($result)) {
echo "<pre>"; print_r($row); echo "</pre>";
  $sum_ud += $row[repraesentation] + $row[kontor] + $row[rejser] + $row[foredrag] + $row[bestyrelse] + $row[rente];
}

Hvad skriver den ud her?
Avatar billede mibu Nybegynder
07. august 2007 - 16:52 #24
Den sætter den tekst ind i toppen.

Array
(
    [repraesentation] =>
    [kontor] =>
    [rejser] =>
    [foredrag] =>
    [bestyrelse] =>
    [rente] =>
)
Avatar billede sw_red_6 Nybegynder
07. august 2007 - 16:56 #25
har du tjekket at der står noget i databasen for de datoer du bruger?
ifølge det der er felterne nemlig tomme..

Husk at samtlige dato felter i alle tabellerne skal have datoer der ligger mellem dem du har valgt..
Avatar billede mibu Nybegynder
07. august 2007 - 17:00 #26
det gør der
Avatar billede mibu Nybegynder
07. august 2007 - 17:08 #27
på min echo kommer der to svar i perioden.

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>";
Avatar billede mibu Nybegynder
08. august 2007 - 13:02 #28
Hej sw red 6

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.

Tak for hjælpen
Michael
Avatar billede mibu Nybegynder
08. august 2007 - 13:07 #29
Hov!
Der var lige den med min printvenlige side:

    echo "<br><script type='text/javascript'>window.open('vis_regnskab.php?id=$hvad_her')</script></a><br>";

Ved du hvordan jeg får sendt mine resultater med over?
Avatar billede mibu Nybegynder
08. august 2007 - 13:21 #30
Det er vel "kun" $dato1 og $dato2 jeg skal have trukket med?
Avatar billede sw_red_6 Nybegynder
08. august 2007 - 13:56 #31
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]..
Avatar billede sw_red_6 Nybegynder
08. august 2007 - 13:57 #32
Jeg synes at vi skal dele pointene, men her er mit svar i hvert fald
Avatar billede mibu Nybegynder
08. august 2007 - 14:17 #33
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 :-)
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