SQL query klopt niet zodra er verschil zit in het aantal getallen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Kees van Norde

Kees van Norde

24/07/2013 12:58:33
Quote Anchor link
Hoi,

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.
 
PHP hulp

PHP hulp

20/04/2024 11:19:58
 
- SanThe -

- SanThe -

24/07/2013 13:00:11
Quote Anchor link
Dan zal je wel VARCHAR hebben gebruikt in de database en geen INT.
 
Erwin H

Erwin H

24/07/2013 13:00:28
Quote Anchor link
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.
 
Kees van Norde

Kees van Norde

24/07/2013 13:41:11
Quote Anchor link
Ik heb het veranderd en nu werkt het eigenlijk wel goed alleen rond hij de getallen nu ook af.

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.
 
- SanThe -

- SanThe -

24/07/2013 13:42:27
 
Kees van Norde

Kees van Norde

24/07/2013 13:59:18
Quote Anchor link
Ik heb het gelezen en ik heb nu decimal gekozen ipv int.
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.
 
- SanThe -

- SanThe -

24/07/2013 14:01:20
Quote Anchor link
Staat het ook zo in de database. Dus geen komma maar een punt?
Dan moet die query het gewoon doen lijkt mij.
 
Kees van Norde

Kees van Norde

24/07/2013 14:03:54
Quote Anchor link
Echt een punt ja, geen komma.
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
 
- SanThe -

- SanThe -

24/07/2013 14:05:51
Quote Anchor link
Hoe heb je die DECIMAL nu staan?
En oude gegevens zijn reeds afgerond door de INT. Worden nieuw ingegeven waarden ook afgerond?
 
Kees van Norde

Kees van Norde

24/07/2013 14:09:40
Quote Anchor link
Dit zie ik nu staan:

decimal(10,0)
Nieuwe gegevens worden verstuurd zonder afronding maar worden nog steeds afgerond.

Gr. Kees.
 
- SanThe -

- SanThe -

24/07/2013 14:14:36
Quote Anchor link
Kees van Norde op 24/07/2013 14:09:40:
Dit zie ik nu staan:

decimal(10,0)


Het tweede getal is het aantal cijfers achter de komma.
Bij jou dus NUL.
 
Koen Vlaswinkel

Koen Vlaswinkel

24/07/2013 14:15:11
Quote Anchor link
Je zult er DECIMAL(10,2) van moeten maken, het tweede getal geeft het aantal decimalen aan.
 
- SanThe -

- SanThe -

24/07/2013 14:15:57
Quote Anchor link
The declaration syntax for a DECIMAL column is DECIMAL(M,D). The ranges of values for the arguments in MySQL 5.1 are as follows:

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.
 
Kees van Norde

Kees van Norde

24/07/2013 14:25:21
Quote Anchor link
Dat klopt alleen dan doet hij dat voor alles, ook voor scores die niet werken met cijfers achter de punt.
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
 
- SanThe -

- SanThe -

24/07/2013 14:32:01
Quote Anchor link
Waarom niet gewoon alles afronden, dat is toch veel netter?
 
Koen Vlaswinkel

Koen Vlaswinkel

24/07/2013 14:33:23
Quote Anchor link
Het is mogelijk door bij het echo'en het nummer + 0 te doen. Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo $row['number'] + 0;
?>
 
Kees van Norde

Kees van Norde

24/07/2013 14:37:56
Quote Anchor link
- 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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo $row['number'] + 0;
?>

Hij moet bij sommige games wel getal achter de punt doen en bij sommige games niet.
 
- SanThe -

- SanThe -

24/07/2013 14:42:07
Quote Anchor link
Bij de echo even checken of de cijfers achter de komma > 0 zijn. Zo nee, echo je het als integer.
 
Kees van Norde

Kees van Norde

24/07/2013 14:46:58
Quote Anchor link
Ik heb het nu zeg maar zo:

$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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

24/07/2013 15:18:48
Quote Anchor link
Met een join kan je dat in één query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
Gewijzigd op 24/07/2013 15:19:53 door Ger van Steenderen
 
Kees van Norde

Kees van Norde

24/07/2013 15:55:44
Quote Anchor link
Ger van Steenderen op 24/07/2013 15:18:48:
Met een join kan je dat in één query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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.
 

Pagina: 1 2 volgende »



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.