Rekenen in MySQL, teller bij while
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:
Het betreffende stukje script:
Code (php)
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
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>
';
}
?>
$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
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.
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.
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...?
Nu het rekenen in MySQL nog
Over de aliassen: dacht dat dat moest bij mysql_fetch_object()
Maar hoe zit dat tellertje in elkaar dan...?
Quote:
Teller gelukt:
Code (php)
1
2
3
4
5
6
7
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
?>
$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
Kan iemand mij uitleggen hoe ik precies moet rekenen in MySQL? (Voorbeeldje?)
*BUMP*
*BUMP*
Gewijzigd op 01/01/1970 01:00:00 door Nick Mulder
Code (php)
1
2
3
4
5
6
7
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
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
Ok bedankt, het werkt nu geloof ik =)
Code (php)
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
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>
';
}
}
?>
$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>
';
}
}
?>




