Avatar billede fynbo Nybegynder
22. november 2002 - 10:53 Der er 17 kommentarer og
1 løsning

Order By Fejl

Hejsa!

http://www.skattelov.dk/index.php?site=90&sub_site=39

Dette er resultatet af denne query:
"select titel, dato, beskrivelse,hits,skribent,id from artikler where sub = '$sub' order by titel asc limit 10"

Men som i sikkert kan se, kan MySQL slet ikke få sorteret dem i rigtig rækkefølge. Men det underlige er, at sortere du via "order by titel desc", er der ingen problemer..

Jeg har hørt noget om, at denne fejl er en kendt mysql fejl, nogen der har en løsning?
Avatar billede proaccess Nybegynder
22. november 2002 - 10:59 #1
Det kan være et skud i blinde, men bruger MySQL ikke asc, som default, og du derfor kan udelade det...

"select titel, dato, beskrivelse,hits,skribent,id from artikler where sub = '$sub' order by titel limit 10"
Avatar billede limemedia Nybegynder
22. november 2002 - 11:00 #2
proev evt at lave undlade ordet ASC, da det er indbefattet. Hvilket system arbejder du paa, hvilken mysql version ?
Avatar billede fynbo Nybegynder
22. november 2002 - 11:09 #3
MySQL kører på en Windows 2000 Advanced Server med MySQL 4.0.2

Og når man fjerner ASC så sker der intet...
Avatar billede limemedia Nybegynder
22. november 2002 - 11:23 #4
nu er 4.0.2 versionen en "development version" - og dev. versioner i produktions miljoe ? overvej evt at proeve med den nye 4.0.5.

Jeg har selv kun 3.23.52 installeret, saa kan ikke teste. Dog har jeg flere steder baade ASC og DESC sorteringer der virker.
Avatar billede fynbo Nybegynder
22. november 2002 - 11:35 #5
ASC virker fint på i andre query's.. det er de der punktummer der driller!
Avatar billede fynbo Nybegynder
22. november 2002 - 11:35 #6
Men jeg får lige opdateret MySQL og vender så tilbage!
Avatar billede nemeier Nybegynder
22. november 2002 - 12:09 #7
Fejlen er ikke ikke i MySQL men i de informationer som du har gemt i denne, her er et lille klip af den html kode som du har genereret

"#AE145D"> A.B.1.1 Løn

Bemærk den blanke som er foran A.B.1.1, det er fejlen: ' ' er mindre end 'A'.

Du skal lave en kørsel som venstre stiller alle dine tekster.
Avatar billede nemeier Nybegynder
22. november 2002 - 12:11 #8
Du vil dog forsat få problemer da den vil sortere alfabetisk f.eks vil A.B.1.10 blive vist før A.B.2.2
Avatar billede fynbo Nybegynder
22. november 2002 - 12:15 #9
10000 tak! :)

Det var en led fejl!.. Du har lige reddet min dag ;)
Avatar billede nemeier Nybegynder
22. november 2002 - 12:16 #10
Jeg vil anbefale at du laver et ekstra felt som angiver rækkefølgen posterne skal sorteres kald det f.eks. 'sort', lav den af type double, så har man altid mulighed for at lægge en post imellem to andre ved 'sort' fra posten før og efter sammen og dividere med 2. Værdien man får benyttes som 'sort'.
Avatar billede nemeier Nybegynder
22. november 2002 - 12:19 #11
Forresten benyt ikke negative værdier i 'sort', så går det galt. Hvis man lægger en post ind i starten divideres den efterfølgende posts værdi med 2. Hvis man skal lægge en post ind i slutningen lægges 1 til den sidste post.
Avatar billede fynbo Nybegynder
22. november 2002 - 12:44 #12
Kan du forklare det lidt nærmere?
Avatar billede nemeier Nybegynder
22. november 2002 - 13:28 #13
Alle poster får til delt en SORT værdi

1,00 = A.A.1.8
2,00 = A.A.1.9
3,00 = A.A.1.11

Nu vil jeg tilføje en ny post. tager max værdien af tabellen og lægger 1 til.

4,00 = A.A.1.12

Hvis jeg vil tilføje en post i starten tager jeg værdien af posten der ligger før (findes ikke) som er nul og posten der ligger efter som er 1. Summen er 1, deler med 2 og får 0,5

0,50 = A.A.1.1

Hvis jeg vil tilføje en post i mellem A.A.1.9 og A.A.1.11 tager jeg værdien af posten der ligger før som er 2 og posten der ligger efter som er 2. Summen er 5, deler med 2 og får 2,5

2,50 = A.A.1.10

Herefter vil tabellen se sådan ud:

0,50 = A.A.1.1
1,00 = A.A.1.8
2,00 = A.A.1.9
2,50 = A.A.1.10
3,00 = A.A.1.11
4,00 = A.A.1.12

Smart ikke ;)
Avatar billede nemeier Nybegynder
22. november 2002 - 13:33 #14
Hvis man vil flytte en post en linie op. F.eks stille A.A.1.11 før A.A.1.10

Metode 1:
kan man bytte værdierne i SORT, dette vil kræve 3 opdateringer

Metode 2:

man beregner en værdi for at indsætte posten mellem A.A.1.9 og A.A.1.10 ((2+2,5)/2) = 2,25
kræver en select med 2 læsninger som en update.
Avatar billede limemedia Nybegynder
22. november 2002 - 13:39 #15
nemeier > i netop dette tilfaelde, vil det ikke vaere nemmere (smartere) at fremfor et felt med titel hvor der indgaar denne tal fordeling, at lave felter for A A 1 9 hvor man istedet saa kunne soege paa felt1 asc, felt2 asc, felt3 asc, felt4 asc

Umiddelbart kan det synes besvaerligt, men jeg vil hellere sortere paa de reele vaerdier end begynde med den matematiske model du har bygget. Jeg benytter nogle gange en metode bygget over timestamp der byttes rundt for at paa denne maade at kunne dynamisk flytte indhold i forhold til hinanden.
Avatar billede fynbo Nybegynder
22. november 2002 - 13:54 #16
Det med sort, vil være meget besværligt, da vi allerede har 3000 artikler fordelt i 30 kategorier.. Især fordi at de ikke tilføjes i rigtig rækkefølge, og du så skal sidde og regne ud, hvad sort nu skal være..

Jeg er mere stempt for ljweb's model, vil kigge på den straks..
Men hvis jeg har forstået det rigtigt, vil du simpelthen oprette 4 nye felter, som sagt felt1, felt2, felt3 og felt4 og så bede den sortere via disse 4 felter, hvor felt1 = A, felt2 = 2, felt3 = 1 og felt4= 10?
Avatar billede nemeier Nybegynder
22. november 2002 - 14:02 #17
ljweb: Det er korrekt sålænge at man hele tiden benytter samme system med 2 bogstaver og to tal, men desværre bliver man ofte nød til at stoppe en post ind i mellem således at man f.eks. får en A.A.1.9.b. Her vil dit system ikke virke.

fynbo: det er vigtigt at du får defineres felt3 og felt4 som tal ellers vil det ikke virke og du vil have samme problem som jeg beskrive med 1,10,2
Avatar billede limemedia Nybegynder
22. november 2002 - 14:10 #18
nemeier >> jeg kender ikke "fynbo"'s datamodel og hvilke exeptions der er. Det er klart der skal taenkes mere grundigt over det end blot at indfoere 4 felter uden tanke bag.

fynbo >> grunden til at du oplever problemer er, at du i titlen gemmer tal. 10 som tekst er logisk mindre end 2, mens det som en integer er stoerre. PHP indeholder sorteringsmekanismer der kan haandtere dette, men netop som her hvor der er stoerre datamaengder, vil jeg ikke anbefale det - specielt af performance hensyn.
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