Avatar billede JC73 Nybegynder
10. december 2011 - 19:56 Der er 5 kommentarer og
1 løsning

Sortering af data i MySQL query

Hejsa, jeg har forsøgt at lave en lille tabel over nogle spillere jeg har tilkyttet nim database. Jeg vil liste dem så dem med flest 'Frags' står øverst på listen. Mit script genererer ikke nogen fejlmeddeleser, så jeg kan ikke hitte ud af hvorfor de ikke lister som jeg ønsker det?

kig på dette link: http://www.dm.liandricorp.net/ for at se tabellen, den er live og opdateres når spillerne er online.

Og prøv så at sammenligne tabellen med min kode:

[code]
<?php
$con = mysql_connect("localhost", "liandric_user", "1a2b3c4d");
    if (!$con)
          {
          die('Could not connect: ' . mysql_error());
          }

    mysql_select_db("liandric_stats", $con);

    $result = mysql_query("SELECT Server, Name, Frags, Deaths, Suicides, Seconds FROM DeathMatch ORDER BY Frags DESC")
    or die(mysql_error()); 

    echo "<table border='3'>";
    echo "<tr> <th> <font size=5 color='#AAAAAA'> DeathMatch Players </th> </font> </tr>";
    echo "</table>";

    echo "<br/>";

    echo "<table border='1'>";
    echo "<tr> <th> <font color='#AAAAAA'>Name</th> <th> <font color='#AAAAAA'>Frags</th> <th> <font color='#AAAAAA'>Deaths</th>
    <th> <font color='#AAAAAA'>Suicides</th> <th> <font color='#AAAAAA'>Time H:M:S</th> <th> <font color='#AAAAAA'>Eff.</th> </font>
    <th> <font color='#AAAAAA'>Frags/Hour</th> </font> <th> <font color='#AAAAAA'>Server</th> </font> </tr>";

    // keeps getting the next row until there are no more to get
    while($row = mysql_fetch_array( $result ))
        {
        // calculate the time output
        $sekunder = $row['Seconds'];
        $timer = floor($sekunder / (60 * 60));
        $sekunder = floor($sekunder % (60 * 60)); // eller $sekunder - $timer * 60 * 60;
        $minutter = floor($sekunder / 60);
        $sekunder = floor($sekunder % 60); // eller $sekunder - $minutter * 60;
        if ( $sekunder < 10 )
            $sekunder = "0" . $sekunder;
        if ( $minutter < 10 )
            $minutter = "0" . $minutter;
        $Time = $timer . ":" . $minutter . ":" . $sekunder;

        // calculate the efficiency
        $Total = $row['Frags'] + $row['Deaths'] + $row['Suicides'];
        $EFF = floor($row['Frags'] / $Total * 100); 

        // calculate frags per hour frags / sec * 60 * 60
        $FPH = floor($row['Frags'] / $row['Seconds'] * 60 * 60);

        // post the info to the tables
        echo "<tr><td align=center>";
        echo "<font color='#33FF33'>" . $row['Name'] . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $row['Frags'] . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $row['Deaths'] . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $row['Suicides'] . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $Time . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $EFF . "%" . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $FPH . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $row['Server'] . "</font>";
        echo "</td></tr>";
        }

echo "</table>";

?>
[/code]
10. december 2011 - 20:55 #1
JC73, jeg vil gerne hjælpe, men jeg kan ikke læse den kode du viser.  I min browser er linjerne skåret over, og i stedet for tekst som echo"<..>"; viser den echo &quot;&lt;/table&gt;&quot;;  Kunne du prøve at sende det igen?  Det ville også gøre det nemmere, hvis du ikke blot siger, at listen er ikke som du ønsker, men du fortæller hvordan listen er.
Avatar billede JC73 Nybegynder
10. december 2011 - 21:15 #2
ja det ser ikke så godt ud?? jeg prøver lige igen. Listen som den ser ud kan ses online via linket.

her er koden:

$result = mysql_query("SELECT Server, Name, Frags, Deaths, Suicides, Seconds FROM DeathMatch ORDER BY Frags DESC")
    or die(mysql_error());

    // keeps getting the next row until there are no more to get
    while($row = mysql_fetch_array( $result ))
        {
        // calculate the time output
        $sekunder = $row['Seconds'];
        $timer = floor($sekunder / (60 * 60));
        $sekunder = floor($sekunder % (60 * 60)); // eller $sekunder - $timer * 60 * 60;
        $minutter = floor($sekunder / 60);
        $sekunder = floor($sekunder % 60); // eller $sekunder - $minutter * 60;
        if ( $sekunder < 10 )
            $sekunder = "0" . $sekunder;
        if ( $minutter < 10 )
            $minutter = "0" . $minutter;
        $Time = $timer . ":" . $minutter . ":" . $sekunder;

        // calculate the efficiency
        $Total = $row['Frags'] + $row['Deaths'] + $row['Suicides'];
        $EFF = floor($row['Frags'] / $Total * 100); 

        // calculate frags per hour frags / sec * 60 * 60
        $FPH = floor($row['Frags'] / $row['Seconds'] * 60 * 60);

        // post the info to the tables
        echo "<tr><td align=center>";
        echo "<font color='#33FF33'>" . $row['Name'] . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $row['Frags'] . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $row['Deaths'] . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $row['Suicides'] . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $Time . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $EFF . "%" . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $FPH . "</font>";
        echo "</td><td align=center>";
        echo "<font color='#33FF33'>" . $row['Server'] . "</font>";
        echo "</td></tr>";
        }
Avatar billede JC73 Nybegynder
10. december 2011 - 21:17 #3
ja det ser jo straks bedre ud :-)

som du kan se her: http://www.dm.liandricorp.net/

så ligner det ikke en sortering efter $row['Frags'] Descending.
10. december 2011 - 21:27 #4
Det er ganske simpelt.  I din mysql tabel har Frags uden tvivl datatype varchar i stedet for INT.
10. december 2011 - 21:32 #5
Den kom afsted for tidligt.  Jeg ville have forklaret, at når du sorterer en tekst, så kommer alt hvad der begynder med a før det der begynder med b.  For eksempel ananas kommer før by som kommer før c.  På samme måde kommer 123 før 23 som kommer før 3 når disse tegn er defineret som hørende til en tekst i stedet for et tal.  Kik engang på Frag værdierne, og husk, at du sorterer DESC, så vil du se hvad jeg mener.  Skift daatypen til INT, Så skulle det gå i orden.
Avatar billede JC73 Nybegynder
10. december 2011 - 22:04 #6
jamen jamen ..... Det var lige det, jeg takker mange gange!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester