Rekenen in MySQL, teller bij while

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Nick Mulder

Nick Mulder

07/02/2007 09:28:00
Quote Anchor link
Ik ben bezig met het schrijven van een spel, bij dit spel zitten ook highscores, deze worden uit de database gehaald en met een while loop weergegeven, nu wil ik dat het script ook het rank nummer er zelf bij zet (staat niet in database)
Het betreffende stukje script:
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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
$query
= "
    SELECT
    username AS username,
    status AS status,
    werknemers AS werknemers,
    vertrouwen AS vertrouwen,
    category AS category,
    score AS score,
    pand AS pand,
    lvl AS lvl
    FROM users
    ORDER BY score DESC
    "
;
$highscores_run = mysql_query($query) or die(mysql_error());
while($highscores = mysql_fetch_object($highscores_run)){
$calc = (($highscores->status * 3) * ($highscores->vertrouwen * 2) + ($highscores->status * 3) * ($highscores->werknemers / 6) + ($highscores->vertrouwen * 2) * ($highscores->werknemers / 8)) * ($highscores->pand * $highscores->lvl);
$update = "UPDATE `users` SET `score` = '".$calc."' WHERE username='".$highscores->username."'";
$update_run = mysql_query($update) or die(mysql_error());
echo'
    <tr>
      <td width="50" class="highscore-table"></td>
      <td width="100" class="highscore-table">'
.$highscores->username.'</td>
      <td class="highscore-table">'
.$highscores->status.'%</td>
      <td class="highscore-table">'
.$highscores->werknemers.'</td>
      <td class="highscore-table">'
.$highscores->vertrouwen.'%</td>
      <td class="highscore-table">'
.$highscores->category.'</td>
      <td class="highscore-table"><a href="">PM</a></td>
      <td class="highscore-table"><a href="">Profiel</a></td>
    </tr>
    '
;
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Nick Mulder
 
PHP hulp

PHP hulp

20/11/2024 01:32:02
 
Joren de Wit

Joren de Wit

07/02/2007 09:52:00
Quote Anchor link
off-topic: Waarom geef je elke kolomnaam een alias die precies hetzelfde is de kolomnaam? Dat is nergens voor nodig en zal op den duur alleen maar problemen opleveren. Gebruik aliassen alleen als je het ook daadwerkelijk nodig hebt zoals bijvoorbeeld tijdens het berekenen van een resultaat.

Daarnaast kun je de berekening natuurlijk ook gewoon in de database zelf uitvoeren. Met mysql kun je net zo goed (zelfs beter) rekenen als met php.

Voordeel is dat je dan in de database kunt sorteren op de score en aan de hand daarvan de rank kunt bepalen. Je kunt dan vervolgens gewoon een tellertje mee laten lopen met de while loop waarin je de gegevens uitleest, die de huidige rank gaat weergeven.
 
Nick Mulder

Nick Mulder

07/02/2007 10:03:00
Quote Anchor link
In de query rekenen lukte me niet...
Over de aliassen: dacht dat dat moest bij mysql_fetch_object()
Maar hoe zit dat tellertje in elkaar dan...?
Quote:
Teller gelukt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$i
= 0; //defineer $i als 0
$i++; //tel 1 bij $i op (gelijk defineren als 1 gaat niet?)
while($i < mysql_num_rows($highscores_run)){ //begin counter loop
    //hier de oude while loop (dus 2 while loops in elkaar)

} //eind counter loop
?>


Nu het rekenen in MySQL nog
Gewijzigd op 01/01/1970 01:00:00 door Nick Mulder
 
Nick Mulder

Nick Mulder

08/02/2007 10:21:00
Quote Anchor link
Kan iemand mij uitleggen hoe ik precies moet rekenen in MySQL? (Voorbeeldje?)

*BUMP*
Gewijzigd op 01/01/1970 01:00:00 door Nick Mulder
 
Klaasjan Boven

Klaasjan Boven

08/02/2007 10:24:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
     COUNT(id),
     (SUM(score) + SUM(ietsander)) AS totaal,
     (SUM(score) + SUM(ietsander)) / COUNT(id) as mijngemiddelde
FROM
    jouwtabel
GROUP BY id


dat is een voorbeel en er kan nog veel meer
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Nick Mulder

Nick Mulder

08/02/2007 10:37:00
Quote Anchor link
Ok bedankt, het werkt nu geloof ik =)

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
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
$query
= "
    SELECT
    username,
    status,
    werknemers,
    vertrouwen,
    category,
    ((status * 3) * (vertrouwen * 2) + (status * 3) * (werknemers / 6) + (vertrouwen * 2) * (werknemers / 8)) * (pand * lvl) AS score,
    pand,
    id,
    lvl
    FROM users
    ORDER BY score DESC
    "
;
$highscores_run = mysql_query($query) or die(mysql_error());
$i = 0;
$i++;
while($i < mysql_num_rows($highscores_run)){
while($highscores = mysql_fetch_object($highscores_run)){
echo'
    <tr>
      <td width="50" class="highscore-table">'
.$i++.'</td>
      <td width="100" class="highscore-table">'
.$highscores->username.'</td>
      <td class="highscore-table">'
.$highscores->status.'%</td>
      <td class="highscore-table">'
.$highscores->werknemers.'</td>
      <td class="highscore-table">'
.$highscores->vertrouwen.'%</td>
      <td class="highscore-table">'
.$highscores->category.'</td>
      <td class="highscore-table">'
.$highscores->lvl.'</td>
      <td class="highscore-table"><a href="pm.php?to='
.urlencode($highscores->username).'">PM</a></td>
      <td class="highscore-table"><a href="profiel.php?id='
.$highscores->id.'">Profiel</a></td>
    </tr>
    '
;
}
}

?>
 



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.