Avatar billede hypofysen Nybegynder
18. november 2009 - 08:25 Der er 7 kommentarer og
2 løsninger

hjælp til order by

kan man lave en query der hedder order by id, men samtidig smider id = 3 og 4 sidst

altså

1,2,5,6,7,8,9,3,4

og hvis jeg sætter endnu et felt ind skal det så være

1,2,5,6,7,8,9,10,3,4
18. november 2009 - 08:45 #1
Saa skal du nok lave tre queries med UNION.  Jeg proevede det foelgende:

SELECT * from hypofysen
WHERE id NOT IN (3, 4)
UNION
SELECT * FROM hypofysen
WHERE id = 3
UNION
SELECT * FROM hypofysen
WHERE id = 4

og det gav mig det foelgende resultat:

id  tekst 
1 text1
2 text2
5 text5
6 text6
7 text7
8 text8
9 text9
10 text10
3 text3
4 text4
Avatar billede hypofysen Nybegynder
18. november 2009 - 09:40 #2
takker det virker, men er det virkelig den eneste løsning, det kan ikke lade sig gøre med order?

men smid et svar, det virkede :)
18. november 2009 - 09:51 #3
Det er loesningen paa mit videnniveau.  Jeg kan ikke taenke mig (men det behoever ikke at betyde at det ikke kan lade sig goere) en maade at "kode" id-erne saaledes at 3 og 4 faar tilkendt en hoejere vaerdi end alle andre tal.
Avatar billede mrgumble Nybegynder
18. november 2009 - 09:52 #4
Baseret på de data du har (id = {1,...,10}), kan du ikke sortere på andre måder end 1-10 eller 10-1 (eller måske bare tilfældigt).

Men du kan udvide dit datasæt, så der er et felt der beskriver sorterings rækkefølgen. Hvis du f.eks. har nogle id'er der altid skal stå først, nogle der altid står sidst og så dem der bare står i midten, kan du f.eks. tilføje et felt med en af værdierne {0, 1, 2} (med standardværdi 1) og du sortere så med:
[code]SELECT id, sortorder FROM mytable ORDER BY sortorder, id[/code]

For id'erne vil du så have sættet:
[code]
id | sortorder
1 |  1
2 |  1
3 |  2
4 |  2
5 |  1
6 |  1
7 |  1
8 |  1
9 |  1
10 |  1
[/code]

Hvad Christian Belgiens svar angår, lyder det omstændelig hvis du bruger udtrækket i f.eks. et php-script, og det altid er id'erne 3 og 4 - så kunne du ved de to tilfælde gemme resultatet og outputte det bagefter.
Avatar billede hypofysen Nybegynder
18. november 2009 - 10:26 #5
jeg takker, valgte den sidste løsning med sortorder, virkede perfekt :)

tak for svarene begge to
18. november 2009 - 12:32 #6
mrgrumble, ja, man kan klare det i php o.s.v., men spoergsmaalet var hvordan man kan lave en query, saa jeg respekterede spoergsmaalet som stillet og svarede paa det.

Men hvad spoergsmaalet angaar saa synes du at give mig ret i at man ikke umiddelbart kan sortere saaledes at for eksempel 3 og 4 kommer hoejere end 10.  (Man kan saa indsaette andre vaerdier saasom sortordre og sortere paa dem.)  Der ville jo nok kunne skrives stored proecedures der indeholder saadan noget som "IF id = 3 set id = max(id) + 1" men det ligger i periferien af min viden.  Hvis hypofysen ville forklare hvad det er han vil opnaa med sin sortordre saa kunne der maaske taenkes paa andre loesninger, men det ville saa blive et nyt spoergsmaal.
Avatar billede hypofysen Nybegynder
18. november 2009 - 18:09 #7
tja det var måske ikke så godt forklaret :)

det er fordi jeg udskriver en submenu og ved at id 3 og 4 skal ligge sidst.

jeg troede faktisk bare jeg kunne sætte det til id 1000 og 1001 men så bliver næste punkt 1002 istedet for at udfylde de tomme huller..

Det var vist ikke meget bedre forklaret.. :)
Avatar billede arne_v Ekspert
18. november 2009 - 18:17 #8
... ORDER BY IF(id=3 OR id=4,1,0),id
Avatar billede arne_v Ekspert
18. november 2009 - 18:56 #9
... ORDER BY IF(id=3 OR id=4,1,0),id
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