Gå til innhold

Sortering etter poengsum.


Anbefalte innlegg

Hei

 

Meg og noen venner har et lite tippeprosjekt på gang. I den anledning laget jeg en liten webside som viser oversikten over poengsummene.

Problemet er at jeg ikke greier å sortere etter poengsum. Dvs. jeg greier å sortere, men f.eks 88 kommer lavere enn 9 på grunn av at den bare ser på første tall.

Må si at php kunnskapene mine er nær null, så dette er ikke noen avansert sak.

 

Listen ser dere her.

 

Her er litt av koden som skriver ut listen over poengene:

 

<?php
{
include("xxxxx.php");
$connection = mysql_connect($host,$user,$password) or die ("Kunne ikke koble til server");
$db = mysql_select_db($database, $connection) or die ("Kunne ikke velge database");

$hent_deltaker = mysql_query("SELECT * FROM deltakere ORDER BY poeng DESC");   

 while($deltakere = mysql_fetch_array($hent_deltaker))
 {
 extract($deltakere);
 echo "
 <tr>
   <td><div align=\"left\">$navn</div></td>
   <td><div align=\"left\">$poeng</div></td>
   <td><div align=\"left\"><a href=\"filer/$forslag.doc\">Last ned forslag</a></div></td>
 </tr>
 ";
 }
}
?>

 

Som dere ser så har jeg brukt "ORDER BY poeng DESC" for å sortere. Feltet i tabellen i mysql er bare vanlig char eller varchar. Har det noe å si kanskje?

 

Takker for svar

 

- gordito

Endret av gordito
Lenke til kommentar
Videoannonse
Annonse

Du må som Torbjør sier gjøre feltet om til int, men det har ingen ting å gjøre om feltet er unsigned eller ikke - det bare endrer verdimulighentene til feltet.

 

Dersom feltet er varchar vil f.eks. sorteringen bli slik:

100

1500

220

3500

4000

 

"alter table deltakere modify poeng int" kan holde, du må vurdere hvilket verdiområde du trenger for scriptet og hvis mulig begrense størrelsen på int eller utvide den.

Lenke til kommentar

Om du vil beholde databasen slik den er kan du forandre denne linjen

$hent_deltaker = mysql_query("SELECT * FROM deltakere ORDER BY poeng DESC");

 

til..

 

$hent_deltaker = mysql_query("SELECT * FROM deltakere ORDER BY cast(poeng as UNSIGNED) DESC");

 

Forøvrig er det dårlig skikk å bruke SELECT *

 

Du bør heller finne ut hva du vil selecte.. til slutt vil mySQL setningen se noe slikt ut:

$hent_deltaker = mysql_query("SELECT navn, cast(poeng as UNSIGNED) as p, forslag FROM deltakere ORDER BY p");

 

Hvorfor er poeng deklarert som CHAR? poeng har da en nummerisk verdi og bør være deklarert som INT.. Gjør som Torbjørn foreslo, ta en alter table på tabellen og løs problemet en gang for alle. tall er INT og bokstaver/tegn er CHAR.

Lenke til kommentar

Takk for svar. Det fungerte når jeg skiftet til int.

Vet at løsningene mine ikke er helt 100%, men nå funker det ihvertfall, skal bare bruke dette i et par uker. Har ikke drevet på med PHP/MySQL på lenge, så derfor er ikke alltid løsningene mine helt patente. Uansett, takker så mye for svar.

 

- gordito

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...