Getallen uit een database halen en optellen.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark

Mark

04/02/2006 11:10:00
Quote Anchor link
Hey,

Ik weet niet hoe ik dit doe, misschien is het heel simpel maar ik kan het niet vinden.

Wat heb ik
Ik wil een gemiddelde berekenen van een aantal cijfers, daar heb ik eerste de AVG() optie voor gebruikt. Dat werkte prima maar elk cijfer heeft een zogenaamd 'gewicht'.

Voorbeeldje:
Cijfer: 5 | | | Gewicht: 3
Cijfer: 9 | | | Gewicht: 2
Cijfer: 3 | | | Gewicht: 4

Mijn database ziet er zo uit:
[ id ] [ kolom ] [ cijfer ] [ gewicht ]

Ik heb nu deze query gebruikt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
$csql
= "SELECT *, (cijfer * gewicht) AS gem FROM cijfers WHERE kolom = '" .$obj->kolom. "' AND id = '" .$_SESSION["id"] . "' GROUP BY id";

$cresult = mysql_query($csql) or die(mysql_error());
while ($cobj = mysql_fetch_object($cresult))
{

echo "<td bgcolor=\"red\">".$cobj->gem . "</td>";
}
    
?>


Maar nu moet dus het gewicht uit de kolom komen waar (WHERE vak = '" .$obj->vak. "' AND id = '" .$_SESSION["id"]). Misschien een wat vaag verhaal maar ik hoop dat iemand het snapt. Nog even een ander voorbeeld:

ID: 1
Kolom: 2
Cijfer: 4
Gewicht: 2

ID: 1
Kolom: 2
Cijfer: 6
Gewicht: 3

ID: 2
Kolom: 2
Cijfer: 4
Gewicht: 2

Dan wil ik van de eerste 2 het gewicht optellen (2 + 3), maar van de laatste niet omdat daar id 2 is.
Gewijzigd op 04/02/2006 11:14:00 door Mark
 
PHP hulp

PHP hulp

05/05/2024 21:13:04
 
Han eev

Han eev

04/02/2006 11:17:00
Quote Anchor link
Zoek is bij mysql Naar SUM
 
Burdy

Burdy

04/02/2006 11:17:00
Quote Anchor link
Probeer het zo eens:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
  $id
= $_SESSION['id'];
  $csql = "SELECT *, (cijfer * gewicht) AS gem FROM cijfers WHERE kolom = '" .$obj->kolom. "' AND id = $id GROUP BY id";

  $cresult = mysql_query($csql) or die(mysql_error());
  while ($cobj = mysql_fetch_object($cresult))
  {

    echo "<td bgcolor=\"red\">".$cobj->gem . "</td>";
  }
    
?>
 
Mark

Mark

04/02/2006 11:33:00
Quote Anchor link
@burdy, wat schiet ik daar mee op? hij vind alles wel. Alleen ik moet dus een aantal cellen uit de kolom gewicht hebben. en die optellen.

@han, ik ga op zoek
 
Jan Koehoorn

Jan Koehoorn

04/02/2006 11:56:00
Quote Anchor link
Een aantal, dus niet alle? Dan heb je of een tweede query nodig, of je doet het in de while loop waar je je records fetcht.
 
Mark

Mark

04/02/2006 12:45:00
Quote Anchor link
ok, met sum() lukt het wel, alleen ik krijg nu een verkeerde uitkomst maar ik denk dat ik weet wat het probleem is

QUERY: SELECT *, ((cijfer * gewicht) / SUM(gewicht)) AS gem

alleen dat klopt dan natuurlijk niet ;) dus ik moet er denk ik een tweede query in stoppen.

Update: Ok, ik heb het nu zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
$gsql
= "SELECT *, SUM(gewicht) AS gewichttot FROM cijfers WHERE vak = '" .$obj->vak. "' AND id = '" .$_SESSION["id"] . "' GROUP BY id";

$gresult = mysql_query($gsql) or die(mysql_error());
while ($gobj = mysql_fetch_object($gresult)) {
                
$gewichttot = $gobj->gewichttot;
                                                
$csql = "SELECT *, ((cijfer * gewicht) / ".$gewichttot.") AS gem FROM cijfers WHERE vak = '" .$obj->vak. "' AND id = '" .$_SESSION["id"] . "' GROUP BY id";
                    
$cresult = mysql_query($csql) or die(mysql_error());
while ($cobj = mysql_fetch_object($cresult)) {
                
echo "<td bgcolor=\"red\">".$cobj->gem . "</td>";
    }    
}

?>


Een tweede query erin, hij vind nu gemiddeld totaal wel waar hij het door moet delen. Maar ik krijg wanneer er meer cijfers moeten worden opgeteld worden een verkeerd antwoord, ik denk dat er ergens iets neit helemaal klopt :P

Als ik dit heb:

36 = 2 x
63 = 3 x
72 = 4 x

36x2 + 63x3 + 72x4 / 9 = 61

Ik krijg er 8 uit.... (via de query). Of moet ik eerst de query helemaal uit laten voeren en dan pas delen door gewichttotaal ?

Update 2: Ik heb het probleem gevonden, wanneer ik cijfer x gewicht doe, pakt hij alleen de eerste en dat is 36x2 = 72 en 72 / 9 = 8

Update 3: Ok, ik heb GROUP BY id weggehaald uit de query en ik krijg nu netjes alle antwoorden uit
36 x 2 = 72
63 x 3 = 189
72 x 4 = 288

;) die moeten dus allemaal opgeteld worden.................of kan ik hier net zo goed een extra kolom in de tabel plaatsen die dat meteen uitrekend als het ingevoerd wordt?
Gewijzigd op 04/02/2006 13:09:00 door Mark
 
Jan Koehoorn

Jan Koehoorn

04/02/2006 13:06:00
Quote Anchor link
Het moet denk ik zo:

(36 x 2 + 63 x 3 + 72 x 4) / (2 + 3 + 4)
 
Mark

Mark

04/02/2006 13:22:00
Quote Anchor link
Heb het opgelost door eigenlijk heel simpel een extra kolom toe te voegen, die meteen cijfer * gewicht doet. En die optellen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
$gsql
= "SELECT *, SUM(gewichttot) AS cijfer FROM cijfers WHERE kolom = '" .$obj->kolom. "' AND id = '" .$_SESSION["id"] . "' GROUP BY kolom";
$gresult = mysql_query($gsql) or die(mysql_error());
while ($gobj = mysql_fetch_object($gresult)) {
                
$cijfer = $gobj->cijfer;                            
$csql = "SELECT *,SUM(gewicht) AS gewicht FROM cijfers WHERE kolom = '" .$obj->kolom. "' AND id = '" .$_SESSION["id"] . "' GROUP BY kolom";
$cresult = mysql_query($csql) or die(mysql_error());
while ($cobj = mysql_fetch_object($cresult)) {
                
echo "<td bgcolor=\"red\" width=\"200\">".$cijfer / $cobj->gewicht ."</td>";
    }    
}

?>


Thanks allemaal
Gewijzigd op 04/02/2006 13:24:00 door Mark
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.