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
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