Archief - PHP/SQL: Scores optellen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Mulle

Legacy Member
Ik zit met het volgende probleem:
Ik heb een lijst met spelletjes die de score opslaat in de database. Nu wil ik van iedere persoon al de hoogste scores per game optellen dat hij gespeeld heeft. Het volgende scriptje tell alle scores op. Hoe moet ik dit oplossen?

Database structuur:
***********************************
* USERID * GAMENR * SCORE * START *
***********************************
* 4 * 2 * 1520 * 1 *
* 4 * 5 * 322 * 1 *
* 4 * 7 * 1302 * 1 *
* 4 * 2 * 1110 * 1 *
* 4 * 2 * 2563 * 1 *
* 5 * 2 * 1558 * 0 *
* 4 * 6 * 4556 * 1 *
* 4 * 2 * 1563 * 1 *
* 5 * 2 * 1236 * 1 *
* 4 * 2 * 1550 * 1 *
* 5 * 1 * 1000 * 1 *
***********************************

<?
$result = mysql_query(" SELECT SUM(SCORE) AS test,userid FROM ".$prefix."score WHERE start = '1' GROUP BY userid ORDER BY test DESC") or die (mysql_error());
while($row = mysql_fetch_array($result)) {
echo "".$row["test"].",".$row["userid"]."";
echo "<br>";
}
?>

Alvast bedankt.

0n3Liner

Legacy Member
nieuwe code
<?
$result = mysql_query(" SELECT SUM(SCORE) AS test FROM ".$prefix."score WHERE start = '1' GROUP BY userid") or die (mysql_error());
if($row = mysql_fetch_array($result)) {
echo "".$row["test"].",".$row["userid"]."";
echo "<br>";
}
?>

1. wrm while gebruiken?
2. wrm de som als test en userid zetten?
3. wrm order by? ge gaat toch mr 1 lijn weergeven

DarkBone

Legacy Member
Zijde daar zo zeker van oneliner ???
Nu wil ik van iedere persoon al de hoogste scores per game optellen dat hij gespeeld heeft.
Het feit dat er een GROUP BY op userid gebeurt zegt al genoeg zeker?

Als ge nu nog es grouped op het gamenr moet dat toch lukken ?
En in plaats van SUM hebde MAX nodig, aangezien ge da hoogste scores per spel wilt:

Code:
SELECT *, MAX(score) AS maximum 
FROM scores 
WHERE start = '1' 
GROUP BY userid, gamenr
ORDER BY userid, gamenr, maximum DESC

Loopen en optellen

Mulle

Legacy Member
Omdat het niet in 1 keer gaat, heb ik iets anders gemaakt dat wel wel werkt.
Ik zal het hier posten. Je kan nooit weten dat iemand het nodig heeft.

PHP:
<? 


$i = 0; 
$result = mysql_query(" SELECT max(score) as score,userid FROM ".$prefix."score WHERE start = '1' GROUP BY userid,gamenr ORDER BY userid DESC") or die (mysql_error()); 
while($row = mysql_fetch_array($result)) { 
    if($row["userid"] == $userid) 
        $score[$userid] += $row["score"]; 
    else{ 
        $i++; 
        $userid = $row["userid"]; 
        $score[$userid] = $row["score"]; 
    } 
} 

$i=0; 
arsort($score); 
while (list($player, $punten) = each($score) AND $i<5) { //5 geeft de 5 hoogste scores aan 
    echo "$player: $punten<br>\n"; 
    $i++; 
} 
?>
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan