EDIT: typfout

Mensen kunnen een cijfer geven dat in de database gezet wordt.
De kolom heet: "cijfer"

Ik heb al wat zitten prutsen en door boeken gebladerd en gegoogled maar het lukt niet.

Met COUNT telt hij hoe vaak er gestemd is op die website.
En ik dacht dat je met SOM de cijfers in de kolom wel kon optellen........

Dit is de code die ik nu heb maar niet werkt:


<?php
$query2 = 
	"SELECT *,
	COUNT(cijfer) AS aantalcijfer,
	SOM(cijfer) AS optellencijfer
	FROM fotoalbummakers AS f
	LEFT JOIN
	recensies AS r
	ON f.naam = r.naam_recensie
	GROUP BY f.naam
	ORDER BY f.naam
	";
	$result2 = mysql_query($query2) or die ("Sorry maar ik kan de fotoalbummakers niet weergeven");
	
	while($row2 = mysql_fetch_object($result2)){
	$gemiddeldcijfer = $result2->optellencijfer / $result2->aantalcijfer;
?>
SUM bedoel je waarschijnlijk...

Edit: Een gemiddelde bereken je overigens met AVG().
<?php
$query2 =
"SELECT *,
COUNT(cijfer) AS aantalcijfer,
SUM(cijfer) AS optellencijfer
FROM fotoalbummakers AS f
LEFT JOIN
recensies AS r
ON f.naam = r.naam_recensie
GROUP BY f.naam
ORDER BY f.naam
";
$result2 = mysql_query($query2) or die ("Sorry maar ik kan de fotoalbummakers niet weergeven");

while($row2 = mysql_fetch_object($result2)){
$gemiddeldcijfer = $row2['optellencijfer'] / $row2['aantalcijfer'];
}
?>

Maar het gemiddelde kan ook dircet met AVG();
Dan krijg je dit:
<?php
$query2 =
"SELECT *,
AVG(cijfer) AS gemcijfer
FROM fotoalbummakers AS f
LEFT JOIN
recensies AS r
ON f.naam = r.naam_recensie
GROUP BY f.naam
ORDER BY f.naam
";
$result2 = mysql_query($query2) or die ("Sorry maar ik kan de fotoalbummakers niet weergeven");

while($row2 = mysql_fetch_object($result2)){
$gemiddeldcijfer = $row2['gemcijfer']; //dit lijkt overbodig omdat je nu 2 variabelen met precies hetzelfde hebt maar je moet zelf even kijken waarvoor je het nodig hebt.
}
?>

pgFrank schreef op 13.08.2007 14:45
SUM bedoel je waarschijnlijk...

Edit: Een gemiddelde bereken je overigens met AVG().


Ja, ik wist niet meer of het som of sum was.
Maar werkt ook niet.

SELECT
  AVG(r.cijfer) AS gemiddelde
FROM 
  fotoalbummakers AS f
    LEFT JOIN recensies AS r ON f.naam = r.naam_recensie
GROUP BY 
  f.naam
ORDER BY 
  f.naam

Heb er op gegokt dat cijfer uit de tabel recencies moet komen.

Let verder goed op de GROUP BY, AVG() is een agregate functie.
Als het niet werkt kun je dan wat errors laten zien ( mysql_error() in je die zetten en eventuele php errors)
Het werkt !!

9+4+3= 16 / 3= 5.3333

Hoe laat ik dit nog zien als: 5.3 ?

Moet even kids uit school halen, kom hier zo terug.....



<?php
$query2 = 
	"SELECT *,
	AVG(r.cijfer) AS gemiddeldcijfer
	FROM fotoalbummakers AS f
	LEFT JOIN
	recensies AS r
	ON f.naam = r.naam_recensie
	GROUP BY f.naam
	ORDER BY f.naam
	";
	$result2 = mysql_query($query2) or die (mysql_error());
	
	while($row2 = mysql_fetch_object($result2)){
?>

<!-- De rechthoek met de webshop naam, plaatje en linken -->
<div class="webshop">
<?php
		//laat de naam zien
		echo '<h1>'.$row2->naam.'</h1>' ;
		//Laat de banner zien
?>
<img class="banner" src="<?php echo $row2->banner ;?>" width="120" height="60" alt="<?php $row2->naam ; ?>">
<?php
	//Laat de tekst zien
	echo '<h2>'.$row2->tekst.'</h2>';
	if(($row2->naam_recensie) == ""){
			echo '<div class="recensie">Nog geen beoordeling&nbsp;&nbsp;|&nbsp;&nbsp;<a href="?recensie_van='.$row2->naam.'">Schrijf een recensie</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a class="uit" href="uitfotoalbummakers.php?id='.$row2->id.'" target="_blank">Bezoek de website -></a></div>';
			}else{
			echo '<div class="recensie">Beoordeling: '.$row2->gemiddeldcijfer.'&nbsp;&nbsp;|&nbsp;&nbsp;<a href="?recensie_van='.$row2->naam_recensie.'">Bekijk de recensies</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a class="uit" href="uitfotoalbummakers.php?id='.$row2->id.'" target="_blank">Bezoek de website -></a></div>';
			}
?>
je moet $row2->gemiddeldcijfer
vervangen door:
<?php
round($row2->gemiddeldcijfer,1)
?>
Kijk bv. eens naar number_format(), maar ook sprintf() kan je behulpzaam zijn.

Offtopic: Waarom gebruik je mysql_fetch_object()? Het heeft niks met objecten te maken en het is zó langzaam... mysql_fetch_assoc() is een stuk sneller en eenvoudiger in het gebruik.
@TJVB

Het werkt, bedankt.

@pgFrank

Toen ik php ging leren moest ik mij een schrijfwijze aanleren. Toen heb ik voor de pijltjes (object) gekozen. Vind ik wel handig. Maar als het inderdaad sneller is dan moet ik me dit misschien maar weer aanleren.

En ik weet niet goed het verschil tussen object of assoc.

Als ik iets wil maken met php en mysql dan kan ik vaak niet vinden hoe het moet. Ik heb een goed boek (PHP5 en MySql - Acadamic Service) maar weet dan niet waar ik moet zoeken.
Ook kijk ik vaak op php handboek (of zoiets) maarja, waar moet je beginnen.

Gelukkig is er dan dit forum :)

Reageren