[php]berekening in een while

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
$my  = mysql_query("SELECT * FROM audiotracker WHERE act='0' ORDER BY id DESC LIMIT 0, 10");
while($obj = mysql_fetch_object($my)){

$Stemmen = explode("|",$obj->Stemmen);
$gem = round(array_sum($Stemmen)/count($Stemmen),$Afronden);
?>
                <tr> 
                  <td class="profiel">
                    
                    <? echo"$obj->artiest"; ?></td>
                  <td class="profiel"><? echo"$obj->titel"; ?>&nbsp;</td>
                  <td class="menu"><? echo"<A onmouseover=\"window.status='Forum Topic';return true\" class=\"menu\" HREF=\"$obj->topicurl\">klik</a>"; ?></td>
                  <td class="menu"><? echo"<A onmouseover=\"window.status='Download';return true\" class=\"menu\" HREF=\"$obj->trackurl\">klik</a>"; ?></td>
                  <td class="menu"><? echo"<a class=\"menu\" HREF=\"javascript:void(0)\"
onclick=\"open('rate.php?id=$obj->ID','miniwin','toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=0,width=200,height=200')\">$gem</a>"; ?></td>
                  
                </tr><? } ?>

ik 2 rijen in de database...en bij beide staat er 1 stem in..
bij id=1 stem=4
bij id=2 stem=3
hij rekent dus het gemiddelde uit van alle stemmen..maar in de echo($gem) laat hij steeds bij elke rij het gemiddelde van id=1 zien..

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Ik denk dat dit het makkelijkste en snelste gaat als je 2 queries er van maakt.

edit:

Wat natuurlijk niet gaat mocht je een brak datamodel hebben

[ Voor 33% gewijzigd door gorgi_19 op 04-01-2004 16:54 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • creative8500
  • Registratie: September 2001
  • Laatst online: 01-02 14:14

creative8500

freedom.

Je kunt ook alle stemmen los in de database opslaan, veel makkelijker, veel sneller.

Acties:
  • 0 Henk 'm!

Verwijderd

$Stemmen = explode("|",$obj->Stemmen);

Iets zegt me dat je database ontwerp niet aan 1NF voldoet.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@gorgi:
code:
1
2
3
4
5
6
7
<?
$my  = mysql_query("SELECT * FROM audiotracker WHERE act='0' ORDER BY id DESC LIMIT 0, 10");
while($obj = mysql_fetch_object($my)){
$Huidig = mysql_fetch_object(mysql_query("SELECT * FROM audiotracker WHERE ID = '$obj->ID'"));
$Stemmen = explode("|",$Huidig->Stemmen);
$gem = round(array_sum($Stemmen)/count($Stemmen),$Afronden);
?>

bedoel je zo??
dan nog werkt het niet..

@Cheatah
sorry maar wat zeg je?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-09 08:50

gorgi_19

Kruimeltjes zijn weer op :9

Erhm.. Ik had eigenlijk in gedachten dat je
SQL:
1
Select AVG(kolomnaam) as gemiddelde FROM tabelnaam

alleen gaat dit niet lukken;

een waarde in een kolom van 1|2
waarde | een scheidingsteken is, gooit roet in het eten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
Afgezien dat het een nogal rare constructie is om data op deze manier op te slaan, doet je oorspronkelijke code gewoon wat het moet doen. Als ik waarden toevoeg aan Stemmen, bijvoorbeeld 1|2|3|4|5 geeft hij netjes 3 als gemiddelde. En voor elk id de goede, overigens.

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
edit: het werkt...

kwam onder andere door een fout met het afronden

[ Voor 112% gewijzigd door Verwijderd op 04-01-2004 18:03 . Reden: reactie van bigtree ]

Pagina: 1