SQL query klopt niet zodra er verschil zit in het aantal getallen
Ik ben bezig met een hoogste score lijst te maken en die werkt aardig alleen klopt er 1 ding nog niet.
Hij moet de score van hoog naar laag laten zien (er zijn meerdere spelers).
Als de score van speler 1 bijv. 300 is en van speler 2 bijv. 450 is laat hij netjes 450 zien als hoogste score.
Maar is de score van speler 1 bijv. 300 en van speler 2 bijv. 2950 dan zegt hij dat speler 1 bovenaan staat.
Het lijkt wel of hij dan sorteerd op het eerste getal, echter moet hij het hele getal berekenen.
De query die ik gebruik is:
$result = mysql_query("SELECT * FROM e107_tournaments_plays where tournament_id = $bereken ORDER by score DESC");
Iemand enig idee wat ik fout doe?
Gr. Kees.
Dan zal je wel VARCHAR hebben gebruikt in de database en geen INT.
Laat me raden, je score veld is van het varchar of char type. In dat geval ga je het nooit goed krijgen. Maak er een int (smallint, tinyint, wat dan ook) van, dan werkt het prima.
Ik heb bepaalde games met scores van bijv. 300.11 en 642.56 etc.
Hij haalt nu de .XX weg zeg maar.
Is daar ook nog wat aan te doen?
Gr. Kees.
http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html
Gewijzigd op 24/07/2013 13:43:52 door - SanThe -
Echter nu heb ik nog hetzelfde effect.
De scores zijn een mix van gewoon een paar getallen en met getallen achter de komma (punt).
Als voorbeeld:
230
2490
600.11
7067
80345.09
16
Dat zijn allerlei verschillende scores (per game wordt een bepaalde type score gemaakt).
Hoe kan ik dat nu het beste uitlezen? :P
Gr. Kees.
Dan moet die query het gewoon doen lijkt mij.
Bij varchar deed hij dat netjes maar bij int en decimal doet hij dat niet, dan rond hij het af (hij hakt .XX eraf zeg maar, en dat moet hij eigenlijk niet doen :P).
Gr. Kees.
Gewijzigd op 24/07/2013 14:04:24 door Kees van Norde
En oude gegevens zijn reeds afgerond door de INT. Worden nieuw ingegeven waarden ook afgerond?
decimal(10,0)
Nieuwe gegevens worden verstuurd zonder afronding maar worden nog steeds afgerond.
Gr. Kees.
Kees van Norde op 24/07/2013 14:09:40:
Dit zie ik nu staan:
decimal(10,0)
decimal(10,0)
Het tweede getal is het aantal cijfers achter de komma.
Bij jou dus NUL.
Je zult er DECIMAL(10,2) van moeten maken, het tweede getal geeft het aantal decimalen aan.
M is the maximum number of digits (the precision). It has a range of 1 to 65. (Older versions of MySQL permitted a range of 1 to 254.)
D is the number of digits to the right of the decimal point (the scale). It has a range of 0 to 30 and must be no larger than M.
Dat is nu juist net het probleem :P
Dan krijg je dus dat dit:
230
2490
600.11
7067
80345.09
16
Dit wordt:
230.00
2490.00
600.11
7067.00
80345.09
16.00
Kijk hier maar eens:
http://computertalk.nl/plugins/tournaments/index.php
Gr. Kees.
Gewijzigd op 24/07/2013 14:26:18 door Kees van Norde
Waarom niet gewoon alles afronden, dat is toch veel netter?
- SanThe - op 24/07/2013 14:32:01:
Waarom niet gewoon alles afronden, dat is toch veel netter?
Omdat bij enkele games het erom gaat hoe ver je bijv. een pinguin slaat (miles), en dan geldt dus ook het getal achter de komma.
Maar ik vraag me af of het mogelijk is die combinatie te kunnen doen, ja via varchar maar dan leest hij weer de hoogste scores niet goed uit...
Toevoeging op 24/07/2013 14:38:56:
Koen Vlaswinkel op 24/07/2013 14:33:23:
Het is mogelijk door bij het echo'en het nummer + 0 te doen. Dus:
Hij moet bij sommige games wel getal achter de punt doen en bij sommige games niet.
Bij de echo even checken of de cijfers achter de komma > 0 zijn. Zo nee, echo je het als integer.
$bereken = $_GET['t'];
$result = mysql_query("SELECT * FROM e107_tournaments_plays where tournament_id = $bereken ORDER by score DESC");
for($i=0; $i<$rows; $i++){
$row = mysql_fetch_array( $result );
$score= $row['score'];
$door= $row['player_id'];
$result2 = mysql_query("SELECT * FROM e107_user where user_id = $door");
$row2 = mysql_fetch_array( $result2 );
$naam= $row2['user_name'];
$text .= "
<td><left>".($i+1)."</left></td>
<td><left>".$score."</left></td>
<td><left>".$naam."</left></td>
</tr>
";
}
Hoe zou dat dan moeten worden?
Alvast enorm bedankt voor de hulp trouwens!
Gr. Kees.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
SELECT
t.score,
t.player_id,
u.user_name
FROM
e107_tournaments_plays t
JOIN
e107_user u ON t.player_id = u.user_id
WHERE
t.tournament_id = 1234
ORDER BY t.score DESC
t.score,
t.player_id,
u.user_name
FROM
e107_tournaments_plays t
JOIN
e107_user u ON t.player_id = u.user_id
WHERE
t.tournament_id = 1234
ORDER BY t.score DESC
Gewijzigd op 24/07/2013 15:19:53 door Ger van Steenderen
Ger van Steenderen op 24/07/2013 15:18:48:
Die code is idd een stuk netter zo, bedankt!
Blijft nog de vraag hoe het uitlezen moet als je zowel met als zonder achter de punt werkt.