rekenen met php/mysql

ik hou voor mezelf een database bij van uitslagen. nu wil ik een paar gegevens uitrekenen, maar weet niet hoe ik dit kan doen in php. het gaat om het volgende ik heb een heleboel gegevens en daarvan kan ik met de functie[code:1:00f93d3b06]$Query = "SELECT distinct waarde FROM $DBname.$Tablename order by waarde desc"; $Result = mysql_query ($Query, $Link) or die ("Could 't execute query.");

//Table

print ("<table border=1 width="50%" cellspacing=2 cellpadding=2
align=center>n");
print ("<tr align=center valign=top>n");
print ("<td align=center valign=top> Alle Waarden</td>n");

print ("</tr>n");

//resultaten uit database

while ($Rows = mysql_fetch_array ($Result))
{
print ("<tr align=center valign=top>n");
print ("<td align=center valign=top>$Rows[0]</td>n");

print &#40;&quot;&lt;/tr&gt;n&quot;&#41;;

}
mysql_close ($Link);
print ("</table>n");[/code:1:00f93d3b06]
nu wil dat van elk getal dat deze functie opleverd het aantal waarneminge weten en het percentage van het geheel. hoe kan ik dit het beste oplossen? zijn er sites waar wiskundige/statistische functies duidelijk worden uitelegd?

daan.


Je kan met het commando Count() op een makkelijke manier de grootte van je array bepalen. Bij het percentage van het geheel bedoel je, neem ik aan het gemiddelde? Alles bij elkaar optellen en delen door het aantal rijen (met count).

Op deze manier kan je ook per rij het een en ander uit rekenen, als je maar eerst de totale waardes hebt.

met percentage van het geheel bedoel ik 10 waarnemingen van 7 , van totaal 100 waarnemingen, dat is 10% . ik wil dus een rijtje krijgen van waarde, aantal, percentage: 7, 10, 10%

daan.

Je moet dan wel alle rijen ophalen en niet DISTINCT gebruiken. Deze haalt alleen de unieke records uit de database, je weet dus niet hoeveel waardes met 7 er zijn.

Nu weet ik dat je met SQL ook [code:1:03bb9fb065]SELECT count, waarde, etc [/code:1:03bb9fb065] kan doen. Volgens mij kan je hierin ook de som (sum) gebruiken. Zover ik weet werkt dit ook met MySQL.

Wat je natuurlijk ook altijd kan doen is met het php-commando [code:1:41862833bf]mysql_num_rows($result);[/code:1:41862833bf] ophalen hoeveel rijen er zijn.

Hierna maak je een loop en tel je alle waarde op.
Vervolgens kan je per rij de berekeningen maken.

Denk je dat je hiermee verder komt, of moet je een php voorbeeld?

dat zou wel makkelijk zijn omdat mijn php kennis niet zo groot is. ik gebruik distinct om te laten zien wat de waarden zijn. kan je die niet gebruiken om dan een functie te creeren die elk deel van disctinct gebruikt in een count where waarde =7 ? daan.

Ik denk zoiets? [code:1:d7f65d56dd] $Query = "SELECT waarde, count( waarde ) AS waarde_cnt FROM $DBname.$Tablename GROUP BY waarde" $Result = mysql_query ($Query, $Link) or die ("Could 't execute query.");

$totrec = mysql_num_rows($Result);

if ($Row = mysql_fetch_array($Result)) {

//Table
print ("<table border=1 width="50%" cellspacing=2 cellpadding=2 align=center>n");
print ("<tr align=center valign=top>n");
print ("<td align=center valign=top> Waarde</td>n");
print ("<td align=center valign=top> Aantal waardes</td>n");
print ("<td align=center valign=top> Percentage</td>n");
print ("</tr>n");

//resultaten uit database

do {
print ("<tr align=center valign=top>n");
print ("<td align=center valign=top>".$Rows[‘waarde’]."</td>n");
print ("<td align=center valign=top>".$Rows[‘waarde_cnt’]."</td>n");
print ("<td align=center valign=top>".round($Rows[‘waarde_cnt’]/$totrec)*100,2)." %</td>n");
print ("</tr>n");
} while ($Row = mysql_fetch_array($Result));
print ("</table>n");
} else {
print (“Geen gegevens gevonden.”);
}
[/code:1:d7f65d56dd]

Met de sum heb ik nog niets gedaan. Dit gan je bijvoorbeeld gebruiken voor een totale score, o.i.d…

Ik denk dat dit hem op deze manier wel is. Geholpen?

[Edit]Ik heb de code iets aangepast, nu moet het beter gaan.[/edit]

als je dit soort waarden alleen wil tellen is het misschien ook een idee om dit gewoon door mysql te laten doen

[quote:5af2df37a9="walinsky"]als je dit soort waarden alleen wil tellen is het misschien ook een idee om dit gewoon door mysql te laten doen[/quote:5af2df37a9] Zoals bij de vorige code gebeurt? Of bedoel je nog verdere berekeningen?

na heel veel gekloot en foutmeldingen heb ik het werkende gekgregen. [code:1:dda0654d46] <?php //database acces $Host="*"; $User="*"; $Password="*"; $DBname="*"; $Tablename="*";

$Link = mysql_connect($Host, $User, $Password);
$Query = “SELECT waarde, count( waarde ) AS waarde_cnt FROM $DBname.$Tablename GROUP BY waarde” ;
$Result = mysql_query ($Query, $Link) or die (“Could 't execute query.”);

$Query1 = "SELECT count( waarde ) AS waarde_cnt FROM $DBname.$Tablename " ;
$Result1 = mysql_query ($Query1, $Link) or die (“Could 't execute query.”);

echo "<pre>";
$row = mysql_fetch_assoc($Result1);
$totrec = $row["waarde_cnt"];
echo"</pre>";
mysql_free_result($Result1);
//tabel
print ("<table border=1 cellspacing=2 cellpadding=2 >n");
print ("<tr align=center valign=top>n");
print ("<td align=center valign=top> Waarde</td>n");
print ("<td align=center valign=top> Aantal Waarden</td>n");
print ("<td align=center valign=top> Percentage</td>n");
print ("</tr>n");

//resultaten uit database

while ($Rows = mysql_fetch_array ($Result))
{
print ("<tr align=center valign=top>n");
print ("<td align=center valign=top>$Rows[0]</td>n");
print ("<td align=center valign=top>$Rows[1]</td>n");
$perc = $Rows[1] / $totrec;
$percent = round($perc * 100,2);
print ("<td align=center valign=top>$percent %</td>n");
print ("</tr>n");
}
mysql_close ($Link);
print ("</table>n");
?>[/code:1:dda0654d46]

daan.

Gelukkig heb je het werkend gekregen. Ik kon helaas de code niet helemaal goed testen, vandaar dat er wellicht een foutje in zat.

Hieronder heb ik de code staan zoals ik het nu getest heb. Dit werkt goed. (ik was overigens vergeten dat het totaal aantal records even opnieuw opgevraagd moesten worden)

[code:1:9b7e396461] $db = mysql_connect($cfgServerHost, $cfgServerUser, $cfgServerPassword);
mysql_select_db($cfgServerDB,$db);

$Query = "SELECT waarde, count( waarde ) AS waarde_cnt FROM test GROUP BY waarde ";
$Result = mysql_query($Query, $db) or die (“Could 't execute query.”);

$Query1 = "SELECT waarde FROM test ";
$Result1 = mysql_query($Query1, $db) or die (“Could 't execute query.”);

$totrec = mysql_num_rows($Result1);

if ($Rows = mysql_fetch_array($Result)) {

//Table
echo "<table border=1 width="50%" cellspacing=2 cellpadding=2 align=center>n";
echo "<tr align=center valign=top>n";
echo "<td align=center valign=top> Waarde</td>n";
echo "<td align=center valign=top> Aantal waardes</td>n";
echo "<td align=center valign=top> Percentage</td>n";
echo "</tr>n";

//resultaten uit database

do {
echo “<tr align=center valign=top>n”;
echo “<td align=center valign=top>”.$Rows[‘waarde’]."</td>n";
echo “<td align=center valign=top>”.$Rows[‘waarde_cnt’]."</td>n";
echo “<td align=center valign=top>”.round(($Rows[‘waarde_cnt’]/$totrec)*100,2)." %</td>n";
echo “</tr>n”;
} while ($Rows = mysql_fetch_array($Result));
echo “</table>n”;
} else {
echo “Geen gegevens gevonden.”;
} [/code:1:9b7e396461]

Ik hoop in ieder geval dat ik je iets geholpen heb.

Je merkt al, we hebben beide een andere manier van werken, vandaar dat je wellicht ook wat errors kreeg. Ik gebruik bijvoorbeeld echo ipv print, etc. Ik ben ook nog niet helemaal een advanced PHP-er. Maar ik kan mijn weg redelijk goed vinden.

wat doet deze code? [code:1:1f108d412f] $db = mysql_connect($cfgServerHost, $cfgServerUser, $cfgServerPassword); mysql_select_db($cfgServerDB,$db);[/code:1:1f108d412f] de volgende regel geeft nml een foutmelding. daan.

De code is vergelijkbaar met jouw code: [code:1:528c1b55d9]//database acces $Host="*"; $User="*"; $Password="*"; $DBname="*"; $Tablename="*";

$Link = mysql_connect($Host, $User, $Password);
[/code:1:528c1b55d9]
Tevens heb jij bij de Query de database genoemd. Dat doe ik dus in die eerste twee variabelen.
Uiteraard zijn $cfgServerHost, $cfgServerUser, $cfgServerPassword en $cfgServerDB variabelen.
Vergelijkbaar met jouw variabelen $Host, $User, $Password, $DBname.