2e probleem:
Je hebt dit
Speler 1:
wedstrijden verloren: 1 -> Dit is veld in DB
wedstrijden gelijk: 2 -> Dit is veld in DB
wedstrijden gewonnen: 1 -> Dit is veld in DB
totaal wedstrijden: 4 -> Dit is GEEN veld in DB!

Speler 2:
wedstrijden verloren: 2 -> Dit is veld in DB
wedstrijden gelijk: 2 -> Dit is veld in DB
wedstrijden gewonnen: 1 -> Dit is veld in DB
totaal wedstrijden: 5-> Dit is GEEN veld in DB!

Nu wil ik dus een top (10) van de meeste wedstrijden van alle gebruikers.
Hoe doe ik dit?
BvD!
-----------------------------------------------------------------
Ik heb volgende code:


<?php
$dbreshoi	= mysql_query("SELECT *,DATE_FORMAT(`speeldatum`,'%d-%m-%y %H:%i') AS `speeldatum` FROM `ssp` WHERE `gespeeld`='1' ORDER BY `bedrag` DESC LIMIT 10");

while($helpdesk = mysql_fetch_object($dbreshoi)) {
$opdracht = "<a href=\"../profile.php?x=$helpdesk->begunstigde\">$helpdesk->begunstigde</a>";
$bedrag = number_format($helpdesk->bedrag);
$gestartdoor = "<a href=\"../profile.php?x=$helpdesk->gestartdoor\">$helpdesk->gestartdoor</a>";
$gespeelddoor = "<a href=\"../profile.php?x=$helpdesk->gespeelddoor\">$helpdesk->gespeelddoor</a>";
if($helpdesk->winnaar == $mijnnaam){
$richting = "<font color=\"green\">Gewonnen</font>";
}
elseif($helpdesk->winnaar == "xx10394"){
$richting = "Gelijkspel";
}
elseif($helpdesk->winnaar == ""){
$richting = "<s>Ongespeeld</s>";
}
else {
$richting = "<font color=\"red\">Verloren</font>";
}
echo "<tr class=\"inhoud\"><td><center>$$bedrag</td><td><center>$helpdesk->speeldatum</td><td><center>$gestartdoor</td><td><center>$gespeelddoor</td></tr>";
}
?>


En dit is het resultaat...

Mijn ORDER BY doet het niet helemaal goed zoals je ziet.
In de DB staat het als 777777777 en niets als 7,777,777... voor alle duidelijkheid. Is het misschien ivm met tegrote bedragen?
PHP Newbie schreef op 03.11.2006 19:21
ik denk zoiets:

SELECT user ORDER BY (verloren + gelijk + gewonnen) ASC LIMIT 10


werkt dit?
Gewonnen, gelijk of verloren, zijn afgeleiden van de uitslagen. Het is dus overbodig om deze gegevens nogmaals op te slaan. Het houdt zelfs een risico in, iemand behaalt de meeste punten, maar door in de fout in de query of in het script wint hij niet. Dit kan ook gebeuren bij b.v. een update van de gegevens.

Tip: Pas het datamodel aan en sla geen berekende gegevens op in jouw database. Het is niet nodig en er kunnen eigenlijk alleen maar dingen fout gaan.
Het werkt ;-). Bedankt iedereen!
& Frank: Ik slaag nergens berekende gegevens op hoor?

Edit: Totaal voorbeeldje...
PHP Newbie, het zal sowieso al niet werken, aangezien je er geen FROM in hebt..

Misschien zoiets:

SELECT velden, die, je, nodig, hebt, (gewonnen + verloren + gelijk) AS totaal,
FROM tabel
ORDER BY totaal DESC;


Ik twijfel alleen over het +, ik dacht dat SUM vermenigvuldigen was, dus dat zou niet werken, maar mischien moet het wel iets van SOM zijn, maar kan niks in de manual vinden.
Aymeric DL schreef op 03.11.2006 21:13
Het werkt ;-). Bedankt iedereen!
& Frank: Ik slaag nergens berekende gegevens op hoor?
Dat is niet wat je hier zegt:
wedstrijden verloren: 1 -> Dit is veld in DB
wedstrijden gelijk: 2 -> Dit is veld in DB
wedstrijden gewonnen: 1 -> Dit is veld in DB
Dat zijn dus 3 velden in de database die niet nodig zijn en voor problemen kunnen zorgen.
hoe zou jij dat dan doen Frank?

Reageren