bernini Skrevet 15. juni 2004 Del Skrevet 15. juni 2004 (endret) 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 15. juni 2004 av gordito Lenke til kommentar
Torbjørn Skrevet 15. juni 2004 Del Skrevet 15. juni 2004 det har noe å si ja. gjør det om til en unsigned int er mitt forslag. SQL: alter table deltakere modify poeng int unsigned Lenke til kommentar
???????? Skrevet 15. juni 2004 Del Skrevet 15. juni 2004 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
[kami] Skrevet 15. juni 2004 Del Skrevet 15. juni 2004 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
Torbjørn Skrevet 15. juni 2004 Del Skrevet 15. juni 2004 generelt unngå å sette varchar(nn) på alt fordi du ikke vet bedre, ie bruk dato typer på tids/dato kolonner, integers på tallkolonner og varchar(nn) på det som ikke har noen annen type. Lenke til kommentar
bernini Skrevet 15. juni 2004 Forfatter Del Skrevet 15. juni 2004 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå