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.
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
11. april 2005 - 15:22
#2
Det tror jeg ikke du kan lave i een query
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
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.
11. april 2005 - 15:34
#5
MySQL said: Documentation #1221 - Wrong usage of UNION and ORDER BY
11. april 2005 - 15:34
#6
Jeg har version: 4.0.21
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..
11. april 2005 - 15:40
#8
Eller: SELECT * FROM brugere ORDER BY IF(adgang = 1,0,1), navn
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 :)
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.
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
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?
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 :)
11. april 2005 - 16:47
#14
Hehe, skide smart egon! ;o) Smid et svar!
11. april 2005 - 16:51
#15
Yeshyesh :) (selvom det er synd for bromer)
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!
11. april 2005 - 18:01
#17
Jeg takker nej tak til points.
11. april 2005 - 18:53
#18
Tark for det - og for points ;)
Computerworld tilbyder specialiserede kurser i database-management