Avatar billede jakobdo Ekspert
11. april 2005 - 15:20 Der er 17 kommentarer og
1 løsning

Udtræk, hvor noget skal sorteres efter adgang og andre efter navn

Hej,
jeg har en tabel som følger:

id - navn - adgang

Kan jeg lave en SQL, som giver mig følgende:

Først skal jeg har alle navne, som har adgang = 1 og de skal derefter sorteres efter navn.
Herefter skal alle andre komme, bare sorteret efter navn.

Altså lidt i stil med:

SELECT * FROM brugere ORDER BY adgang, navn (dog ikke helt korrekt)

Nogle brugere har adgang 2, 3, 4 osv...
Og de skal alle sorteres efter navn, hvor adgang ignoreres.
Avatar billede jakobdo Ekspert
11. april 2005 - 15:21 #1
Her er output jeg ønsker:

2 - Hans - 1
4 - Jens - 1
10 - Morten - 1
1 - Anders - 5
3 - Brian - 2
6 - Martin - 3
9 - Niels - 4
8 - Ole - 2
Avatar billede bromer Nybegynder
11. april 2005 - 15:22 #2
Det tror jeg ikke du kan lave i een query
Avatar billede bromer Nybegynder
11. april 2005 - 15:23 #3
Hvis du benytter en version af MySQL der undstøtter UNION kan du bruge følgende.

SELECT * from brugere WHERE adgang = 1 ORDER BY navn UNION
SELECT * from brugere WHERE adgang <> 1 ORDER BY navn
Avatar billede bromer Nybegynder
11. april 2005 - 15:25 #4
undstøtter skal være understøtter, men det havde du nok regnet ud. Jeg mener det er MySQL 4.0.12 eller noget i den stil du skal have før UNION findes.
Avatar billede jakobdo Ekspert
11. april 2005 - 15:34 #5
MySQL said: Documentation
#1221 - Wrong usage of UNION and ORDER BY
Avatar billede jakobdo Ekspert
11. april 2005 - 15:34 #6
Jeg har version: 4.0.21
Avatar billede bromer Nybegynder
11. april 2005 - 15:36 #7
(SELECT * from brugere WHERE adgang = 1 ORDER BY navn) UNION
(SELECT * from brugere WHERE adgang <> 1 ORDER BY navn)

sådan der..
Avatar billede barklund Nybegynder
11. april 2005 - 15:40 #8
Eller:

SELECT * FROM brugere ORDER BY IF(adgang = 1,0,1), navn
Avatar billede barklund Nybegynder
11. april 2005 - 15:41 #9
Altså først sortere efter, om de har adgang 1 eller ej, og derefter sortere efter navn - præcist som specificeret :)
Avatar billede jakobdo Ekspert
11. april 2005 - 16:07 #10
Barklund, jeg forstår ikke helt hvordan man bruger IF i MYSQL.
Kan du lave en variant, som svare overens med denne:

(SELECT * from brugere WHERE adgang = 1 ORDER BY navn) UNION
(SELECT * from brugere WHERE adgang > 1 ORDER BY navn)

Jeg har nogle som har adgang 0, de skal ikke med.
Avatar billede barklund Nybegynder
11. april 2005 - 16:22 #11
Jada, smid en where på:

SELECT * FROM brugere WHERE adgang != 0 ORDER BY IF(adgang = 1,0,1), navn

:)

Og if er blot IF(betingelse,expr1,expr2) - og så returnerer den expr1 hvis betingelsen er sand - og ellers returnerer den expr2.

--
Morten Barklund
Avatar billede jakobdo Ekspert
11. april 2005 - 16:35 #12
Barklund, jeg tror jeg skal kigge lidt mere på IF i mysql.
Men gider du lige forklare denne:

ORDER BY IF(adgang = 1,0,1), navn
Hvis adgang = 1, så returnere den 0
Hvis adgang != 1, så 1.
Hvor kommer selve sorteringen ind i billedet?
Så den vil jo sortere efter 0,navn
eller 1,navn korrekt?
Avatar billede barklund Nybegynder
11. april 2005 - 16:41 #13
Mjaa, navn bliver jo også oversat, så den vil (efter dine rækker i dit eksempel) sortere efter:

2 - Hans - 1 => 0,Hans
4 - Jens - 1 => 0,Jens
10 - Morten - 1 => 0,Morten
1 - Anders - 5 => 1,Anders
3 - Brian - 2 => 1,Brian
6 - Martin - 3 => 1,Martin
9 - Niels - 4 => 1,Niels
8 - Ole - 2 => 1,Ole

Kan du så se, hvordan 0,Hans kommer først :)
Avatar billede jakobdo Ekspert
11. april 2005 - 16:47 #14
Hehe, skide smart egon! ;o)
Smid et svar!
Avatar billede barklund Nybegynder
11. april 2005 - 16:51 #15
Yeshyesh :)

(selvom det er synd for bromer)
Avatar billede jakobdo Ekspert
11. april 2005 - 17:05 #16
Ja, men han må også gerne svare og få lidt point!
Men din løsning er klart den pæneste!
Avatar billede bromer Nybegynder
11. april 2005 - 18:01 #17
Jeg takker nej tak til points.
Avatar billede barklund Nybegynder
11. april 2005 - 18:53 #18
Tark for det - og for points ;)
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