Avatar billede markus-king Nybegynder
09. april 2011 - 18:29 Der er 16 kommentarer og
2 løsninger

ORDER BY sorterer forkert?

Hej,

Jeg har forsøgt at få min database til at udskrive noget, sorteret efter nogle tal i databasen. Alligevel insisterer den på at sortere efter id'et istedet?

Der er tale om en hjemmeside i PHP, og forstår ikke rigtig hvad problemet er. Det ser jo ud til at det burde virke..


Håber I kan svare!


Markus
09. april 2011 - 18:36 #1
Du kommer nok til at vise hvordan du forsoeger at faa det udskrevet.  Vis din kode.
Avatar billede markus-king Nybegynder
09. april 2011 - 18:42 #2
Tak for det hurtige svar!

Her er koden, intet usædvanligt formoder jeg?

<?
$hent = mysql_query("SELECT * FROM p_users ORDER BY rate DESC LIMIT 0, 7") or die(mysql_error());
while($vis = mysql_fetch_array($hent)){
echo "<a href=bprofil.php?id=$vis[id]>$vis[username]</a> $vis[rate]<br>";
}
?>
Avatar billede erikjacobsen Ekspert
09. april 2011 - 19:02 #3
Hvilken type er feltet `rate` defineret som?
Avatar billede markus-king Nybegynder
09. april 2011 - 19:26 #4
Den er af typen INT.
09. april 2011 - 19:27 #5
Ja, det ser jo rigtigt nok ud.  Det burde virke, saaledes at raekkefoelgen i udskriften foelger raekkefoelgen af rate DESC.  Du skulle saa faa udskrevet et antal linier, hver linie med et username som link og rate.  Kunne du vise et eksempel paa hvad du faar skrevet ud og angive id for hver raekke?
Avatar billede Slettet bruger
09. april 2011 - 19:33 #6
Mangler der ikke plinger omkring index'erne i $vis

echo "<a href=bprofil.php?id="
    .$vis['id'].">"
    .$vis['username']."</a> "
    .$vis['rate']."<br>";
Avatar billede markus-king Nybegynder
09. april 2011 - 19:38 #7
Tja, vil af gode grunde ikke linke til siden, men kan prøve at illustrere det:

ID | Username | Rate

1 Micheal 9
2 Thomas 2
3 Test 8

Den udskriver altså korrekt i forhold til hvilken username der har hvilken rate. Den sorterer desværre bare efter IDet. Det giver godt nok ingen mening.
Avatar billede erikjacobsen Ekspert
09. april 2011 - 19:48 #8
Nix, det giver ingen mening. Jeg tror egentlig at du kører en anden stump kode, end du tror.
Avatar billede Slettet bruger
09. april 2011 - 20:03 #9
Aha! Jeg testede lige og oplevede det samme (måske)

Hvis man bruger mysqli og prepared statements og skriver:
"SELECT * FROM tabel WHERE id=? ORDER BY ?"

Og derefter binder orderBy-?-tegnet til feltnavnet (i en streng)
- Så sorteres der slet ikke! (og der meldes heller ikke om fejl!)

Brug i stedet:
"SELECT * FROM tabel WHERE id=? ORDER BY ".$sortFeltNavn

(og sørg for at $sortFeltNavn ikke kan gramses på af brugerne)
Avatar billede arne_v Ekspert
09. april 2011 - 21:03 #10
"... ORDER BY ?" og bind til en streng med ABC bliver til "... ORDER BY 'ABC'" og er helt legal SQL, saa naturligvis giver det ikke fejl. Det har dog ganske rigtigt ikke nogen effekt.
Avatar billede arne_v Ekspert
09. april 2011 - 21:04 #11
Jeg tror mest paa Eriks forklaring om at den kode der faktisk koerer er anderledes end den viste.
Avatar billede markus-king Nybegynder
10. april 2011 - 13:21 #12
Hmm.. Tror jeg fandt problemet..

Mit FTP program havde åbenbart lyst til kun at opdatere en gammel fil, frem for den jeg sad og arbejdede med..

Men tak skal I have! Tom, Erik og Christian, I bedes venligst at lave et svar - Tak for hjælpen alle sammen.
10. april 2011 - 13:36 #13
Svar fra mig.
Avatar billede Slettet bruger
10. april 2011 - 14:50 #14
hip hip
Avatar billede erikjacobsen Ekspert
10. april 2011 - 23:43 #15
Ingen point til mig, tak.
Avatar billede markus-king Nybegynder
11. april 2011 - 21:13 #16
Jamen så siger jeg endnu engang tak til jer alle.
Avatar billede Slettet bruger
11. april 2011 - 23:48 #17
Hvad VAR så problemet ?
Avatar billede erikjacobsen Ekspert
15. april 2011 - 23:06 #18
#10 - det svarer vist til at sætte sig ned og sortere en pakke M&Ms alfabetisk.

;)
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
Computerworld tilbyder specialiserede kurser i database-management

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